串的邏輯結構:
串:零個或多個字元組成的有限序列。
串長度:串中所包含的字元個數。
空串:長度為0的串,記為:" "。
子串:串中任意個連續的字元組成的子串行。
主串:包含子串的串。
子串的位置:子串的第乙個字元在主串中的序號。
順序串:用陣列來儲存串中的字串行。
模式匹配——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[ ])
模式匹配——kmp演算法
next[j]的演算法分析:
k=next[j-1](由next的 定義可以知道:t0t1…tk-1= tj-k…tj-3tj-2) 1. 如果t[k]==t[j-1]或k==-1(不存在長度相同的字首子串和左子串 )
則t0t1…tk-1tk= tj-k…tj-3tj-2tj-1,因此 next[j]=k+1,next[j]計算結束 否則, 查詢t0t1…tk的最長左子串 k=next[k],轉 1 繼續執行
否則, 查詢t0t1…tk的最長左子串 k=next[k],轉 1 繼續執行
1、在串s和串t中分別設比較的起始下標i和j;
2. 迴圈直到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,準備下一趟比較;
3. 如果t中所有字元均比較完畢,則返回匹配的起始下標;否則返回-1;
int kmp_findpat(char *s, char *t,int *next)
else
j=next[j];
} if(t[j]=='\0')
return i-j;
else
return -1;
}
多維陣列
陣列:陣列是由一組型別相同的資料元素構成的有序集合,每個元素受n(n≥1)個線性關係的約束,並稱該陣列為 n 維陣列。
⑴ 訪問:給定一組下標,讀出對應的陣列元素;
⑵ 修改:給定一組下標,儲存或修改與其相對應的陣列元素。
訪問和修改操作本質上只對應一種操作——定址
常用的對映方法有兩種:
按行優先:先行後列,先儲存行號較小的元素,行號相同者先儲存列號較小的元素。
按列優先:先列後行,先儲存列號較小的元素,列號相同者先儲存行號較小的元素。
aij前面的元素個數 =整行數×每行元素個數+本行中aij前面的元素個數 =(i -l1)×(h2 -l2+1)+(j -l2)
矩陣的壓縮儲存
特殊矩陣:矩陣中很多值相同的元素並且它們的分布有一定的規律。
稀疏矩陣:矩陣中有很多零元素。
壓縮儲存的基本思想是: ⑴ 為多個值相同的元素只分配乙個儲存空間;
⑵ 對零元素不分配儲存空間。
對稱矩陣
對稱矩陣特點:aij=aji
對於下三角中的元素aij(i≥j), 在一維陣列中的下標k與i、j的關係為: k=i×(i-1)/2+j-1 。
上三角中的元素aij(i<j),因為aij=aji,則訪問和它對應的元素aji即可,即: k=j×(j-1)/2+i -1。
對角矩陣 (帶狀矩陣)
對角矩陣:所有非零元素都集中在以主對角線為中心的帶狀區域中,除了主對角線和它的上下方若干條對角線的元素外,所有其他元素都為零。
k=(3*(i-1)-1)+(j-i+1) k=2i+j-3
稀疏矩陣
大部分數是0
三元組表:將稀疏矩陣的非零元素對應的三元組所構成的集合,按行優先的順序排列成乙個線性表。
const int maxterm=100;
template struct sparsematrix
;
資料結構筆記 第四章 字串和多維陣列
第四章 字串和多維陣列 字串 4.2.1字串的邏輯結構 在c語言,c 中,字串以 0結束,可整體輸出。子串的第乙個字元在主串中的序號稱為子串在主串中的位置。4.2.2 字串的儲存結構 有三種方法表示字串的長度 在陣列最後乙個位置 maxsize 1 儲存串長度 用陣列的0號單元儲存串的長度 判斷當前...
資料結構 第四章 字串和多維陣列
第四章 字串和多維陣列 4.1 字串 4.1.1 字串的定義 1.字串的定義 字串是零個或多個組成的有限序列,只包含空格的串成為空格串。串中所包含的字元個數成為串的長度,長度為0的串為空串,記作 乙個非空串通常該記作 s s1,s2 sn 字串中任意個連續的字元組成的子串行稱為該串的子串,相應地,包...
資料結構 第四章 字串和多維陣列
4.1字串 4.1.1 字串的定義 1.定義 字串是零個或多個字元組成的有限序列,只包含空格的串稱為空格串。串中所包含的字元個數稱為串的長度,長度為零的串稱為空串,記作 p非空串通常記為 s s1s2 sn 其中 s是串名,雙引號是定界符,雙引號引起來的部分是串值 si 1 i n 是乙個任意字元。...