第四章小結

1、AI核心代碼node

在解決判斷獨立單詞與詞組時,雖然操做不同,可是具體操做無非大同小異。只是在這個單詞的基礎上以連續接踵的詞組替換罷了。ios

複製代碼
 1  //獨立的me 
 2           if(t[j]=='m' && t[j+1]=='e' && (j==0 || isSeparator(t[j-1])) && isSeparator(t[j+2])){
 3              cout << "you";
 4              j += 2;
 5              continue;
 6          }
 7 
 8         //獨立的can you
 9         if (isCanyou(t, j)) {
10             cout << "I can";
11             j += 7;
12             continue;
13         }
14 //判斷是否爲獨立的can you
15 bool isCanyou(char ch[],int n) {
16     if (ch[n] == 'c'&&ch[n + 1] == 'a'&&ch[n + 2] == 'n'&&ch[n + 3]==' ' && ch[n + 4] == 'y'&&ch[n + 5] == 'o'&&ch[n + 6] == 'u') {
17         if ((n == 0 || isSeparator(ch[n - 1])) && isSeparator(ch[n + 7])) {
18             return true;
19         }
20     }
21     return false;
22 }
複製代碼

而在這裏用到的兩樣新東西同時也是學到的兩點新知識:tolower和getchar函數

1.tolowerspa

tolower是一種函數,功能是把字母字符轉換成小寫,非字母字符不作出處理。和函數int _tolower( int c )功能同樣,可是_tolower在VC6.0中頭文件要用ctype.h3d

複製代碼
 1 案例:
 2 #include <iostream>
 3 #include <string>
 4 #include <cctype>
 5 using namespace std;
 6 int main()
 7 {
 8     string str= "THIS IS A STRING";
 9     for (int i=0; i <str.size(); i++)
10        str[i] = tolower(str[i]);
11     cout<<str<<endl;
12     return 0;
13 }
複製代碼

2.getchar()code

 

getchar()函數的做用是從計算機終端(通常爲鍵盤)輸入一個字符。getchar()函數只能接收一個字符,其函數值就是從輸入設備獲得的字符。htm

複製代碼
案例:
#include <stdio.h>
  int main()
  {
  char a,b;
  a=getchar();
  b=getchar();
  putchar(a);
  putchar(b);
return 0;
}
  /*咱們輸入x-回車-y-回車
  結果會是xy嗎?不是的 結果是a=x b='\n'(回車)
  當咱們開始打x的時候,x在緩衝區,當咱們按下回車的時候,第一個getchar()才獲取到x這個值
順利存到a裏 但回車既是肯定又是字符,回車'\n'它也跟着進了緩衝區,而且和x一塊兒被釋放,x到了程序裏
回車('\n')也到了程序裏,而且被第2個 getchar()獲取,此時咱們輸入y,這時緩衝區裏有一個字符 'y',
而後咱們又按下回車,'y'和'\n'又一塊兒準備被釋放,因爲程序裏沒有第3個getchar(),因此'y'和'\n'還留在緩衝區,
但它們兩個已是在準備狀態中,若是程序又出現一個getchar(),'y'不須要你按回車它會直接進入到第3個getchar(),
getchar()是依次獲取,按前後順序,不會先獲取'\n',而'\n'正等待着立刻進入第4個getchar() */
複製代碼

2、稀疏矩陣壓縮儲存blog

關於三元組表和十字鏈表的使用:繼承

1.三元組表內存

對於在實際問題中出現的大型的 稀疏矩陣,若用常規分配方法在計算機中 儲存,將會產生大量的 內存浪費,並且在訪問和操做的時候也會形成大量時間上的浪費,爲了解決這一問題,從而產生了多種解決方案。
因爲其自身的稀疏特性,經過壓縮能夠大大節省稀疏矩陣的內存代價。具體操做是:將非零元素所在的行、列以及它的值構成一個三元組(i,j,v),而後再按某種規律存儲這些三元組,這種方法能夠節約存儲空間
複製代碼
 1 結構定義
 2 struct node
 3 {
 4     int i,j;  //定義三元組的行、列號
 5     int v;   //三元組的值
 6 };
 7 struct sparmatrix
 8 {
 9     int rows,cols; //稀疏矩陣的行、列數
10     int terms;   //稀疏矩陣的非零元個數
11     struct node data[maxsize]; //存放稀疏矩陣的三元組表
12 };
複製代碼

2.十字鏈表  http://www.cnki.com.cn/Article/CJFDTOTAL-DWJS201105005.htm

十字鏈表繼承了單鏈表的插入和刪除操做。若

要在十字鏈表中插入 1 個結點,只需將該結點分別
插入其所在行的行鏈表以及其所在列的列鏈表即
可。若要在十字鏈表中刪除 1 個結點,可將該結點
分別從其所在的行鏈表和列鏈表中分離出來,而後
刪除該結點。因爲行、列鏈表的附加頭結點也均被
連接成了單鏈表,所以,十字鏈表行、列的擴充操
做也很方便。若要增長 1 行,須要首先將該行的附
加頭結點插入附加列鏈表,而後將該行元素分別插
入十字鏈表便可。
綜上所述,十字鏈表具備如下 2 個優勢:
1)結構靈活,擴展性強。十字鏈表的插入和
刪除操做十分方便、高效,而且可以靈活地擴展矩
陣的維數。
2)檢索方式靈活。十字鏈表可以在行、列 2
個方向上檢索矩陣元素,而且增長了輔助數 組,可以直接訪問矩陣的主對角元,可以從任意矩陣元素所在結點開始檢索其所在行和列的後繼結點。

相關文章
相關標籤/搜索