資料結構筆記 第四章 字串和多維陣列

2021-09-29 02:08:29 字數 2194 閱讀 9524

串的邏輯結構:

串:零個或多個字元組成的有限序列。

串長度:串中所包含的字元個數。

空串:長度為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 是乙個任意字元。...