大二數據結構第五次總結

          第四章   字符串和多維數組
 1.串
 串:零個或多個字符組成的有限序列。

串長度:串中所包含的字符個數。
空串:長度爲0的串,記爲:" "。
子串:串中任意個連續的字符組成的子序列。
主串:包含子串的串。
子串的位置:子串的第一個字符在主串中的序號
2.串的存儲結構
順序串:用數組來存儲串中的字符序列
鏈接串:用鏈接存儲結構來存儲串。
3.模式匹配
給定主串S="s1s2…sn"和模式T=“t1t2…tm”,
在S中尋找T 的過程稱爲模式匹配。
基本思想:
從主串S的第0個字符開始和模式T 的第0個字符進行比較,
若相等,則繼續比較兩者的後續字符;
否則,從主串S的第1個字符開始和模式T 的第0個字符進行比較,
重複上述過程,直到T 中的字符全部比較完畢,則說明本趟匹配成功;或S中字符全部比較完,則說明匹配失敗。
說明:模式匹配過程要進行多趟的匹配,每趟匹配要進行若干次的比較。
4.BF算法

  1. 在串S和串T中設比較的起始下標i和j;
  2. 循環直到S或T的所有字符均比較完;
    2.1 如果S[i]==T[j],繼續比較S和T的下一個字符;
    2.2 否則,將i和j回溯(i=i-j+1,j=0),準備下一趟比較;
  3. 如果T中所有字符均比較完,則匹配成功,返回匹配的起始比較下標(i-j);否則,匹配失敗,返回-1;
    代碼:
    int BF(char S[ ], char T[ ])
    {
    i=0; j=0;
    while (i<S.Length()&&j<T.length())
    {
    if (S[i]==T[j]) {
    i++; j++;
    }
    else {
    i=i-j+1; j=0;
    }
    }
    if (j>=T.length()) return (i-j);
    else return -1;
    }
    5.KMP算法
    結論: i可以不回溯,模式向右滑動到的新比較起點k ,並且k 僅與模式串T有關。
    思路:
    1.在串S和串T中分別設比較的起始下標i和j;
  4. 循環直到S中所剩字符長度小於T的長度或T中所有字符均比較完畢
    2.1 如果S[i]==T[j],繼續比較S和T的下一個字符;否則
    2.2 將j向右滑動到next[j]位置,即j=next[j];
    2.3 如果j=-1,則將i和j分別加1,準備下一趟比較;
  5. 如果T中所有字符均比較完畢,則返回匹配的起始下標;否則返回-1;
    代碼:
    int KMP_FindPat(char *s, char *t,int *next){
    int i=0,j=0,k;
    while(s[i]!=’\0’ && t[j]!=’\0’) {
    if(j==-1 || s[i]t[j]) {
    i++;
    j++;
    }
    else
    j=next[j];
    }
    if(t[j]
    ’\0’)
    return i-j;
    else
    return -1;
    }
    6.多維數組 數組是由一組類型相同的數據元素構成的有序集合,每個元素受n(n≥1)個線性關係的約束,並稱該數組爲 n 維數組。
    7.數組的特點 元素本身可以具有某種結構,屬於同一數據類型; 數組是一個具有固定格式和數量的數據集合。
    8.數組的基本操作 ⑴ 存取:給定一組下標,讀出對應的數組元素; ⑵ 修改:給定一組下標,存儲或修改與其相對應的數組元素。 存取和修改操作本質上只對應一種操作——尋址
    9.矩陣的壓縮存儲 特殊矩陣:矩陣中很多值相同的元素並且它們的分佈有一定的規律。 稀疏矩陣:矩陣中有很多零元素。 壓縮存儲的基本思想是: ⑴ 爲多個值相同的元素只分配一個存儲空間; ⑵ 對零元素不分配存儲空間。 對角矩陣:所有非零元素都集中在以主對角線爲中心的帶狀區域中,除了主對角線和它的上下方若干條對角線的元素外,所有其他元素都爲零。 稀疏矩陣的壓縮存儲——三元組順序表
    存儲結構定義:
    const int MaxTerm=100;
    template
    struct SparseMatrix
    {
    T data[MaxTerm]; //存儲非零元素
    int mu, nu, tu; //行數,列數,非零元個數
    };
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章