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

2021-06-27 16:15:02 字數 2997 閱讀 7854

1.字串的定義

字串是零個或多個字元組成的有限序列,只包含空格的稱為空格串。串中所包含的字元個數稱為串的長度,長度為零的串稱為空串。

字串中任意個連續的字元組成的子串行稱為該串的子串,包含子串的串稱為主串。子串的第乙個字元在主串中的序號稱為子串在主串中的位置。

2.字串的比較

給定兩個字串:

x="x1x2…xn"和y="y1y2…ym",則:

1. 當n=m且x1=y1,…,xn=ym時,稱x=y;

2. 當下列條件之一成立時,稱x<y:

⑴ n<m且xi=yi(1≤ i≤n);

⑵存在k≤min(m,n),使得xi=yi(1≤i≤k-1)且xk<yk。

一般有三種方法表示字串的長度:

(1)用乙個變數來表示字串的長度;

(2)在串尾儲存乙個不會在串中出現的特殊字元作為字串的終結符;

(3)用陣列的0號單元存放串的長度,串值從1號單元開始存放。

給定兩個字串s="s1s2…sn"和模式t="t1t2…tm",在s中尋找t 的過程稱為模式匹配。如果匹配成功,返回t 在s中的位置;如果匹配失敗,返回0。

1.樸素的模式匹配

這是一種帶回溯的匹配演算法,簡稱bf演算法,其基本思想是:從主串s的第乙個字元開始和模式t 的第乙個字元進行比較,若相等,則繼續比較兩者的後續字元;否則,從主串s的第二個字元開始和模式t 的第乙個字元進行比較,重複上述過程,直到t 中的字元全部比較完畢,則說明本趟匹配成功;或s中字元全部比較完,則說明匹配失敗。

偽**:

1. 在串s和串t中設比較的起始下標i和j;

2. 迴圈直到s或t的所有字元均比較完

2.1 如果s[i]=t[j],繼續比較s和t的下乙個字元;

2.2 否則,將i和j回溯,準備下一趟比較;

3. 如果t中所有字元均比較完,則匹配成功,返回匹配的起始比較下標;否則,匹配失敗,返回0;

樸素的模式匹配演算法bf

int bf(char s[ ], char t[ ])

else   

}if (t[j]=='\0') return (i-j+1);  

else return 0;}

(1)設串s長度為n,串t長度為m,在匹配成功的情況下,考慮兩種極端情況:

最好情況:不成功的匹配都發生在串t的第1個字元。

例如:s="aaaaaaaaaabcdccccc"

t="bcd "

設串s長度為n,串t長度為m,在匹配成功的情況下,考慮兩種極端情況:

最好情況:不成功的匹配都發生在串t的第1個字元。

設匹配成功發生在si處,則在i-1趟不成功的匹配中共比較了i-1次,第i趟成功的匹配共比較了m次,所以總共比較了i-1+m次,所有匹配成功的可能情況共有n-m+1種,則:(即共比較了i趟,前i-1趟均只比較了1次,而第i趟比較了m次)

(2)設串s長度為n,串t長度為m,在匹配成功的情況下,考慮兩種極端情況:

最壞情況:不成功的匹配都發生在串t的最後乙個字元。

例如:s="aaaaaaaaaaabccccc"

t="aaab"

設串s長度為n,串t長度為m,在匹配成功的情況下,考慮兩種極端情況:

最壞情況:不成功的匹配都發生在串t的最後乙個字元。

設匹配成功發生在si處,則在i-1趟不成功的匹配中共比較了(i-1)×m次,第i趟成功的匹配共比較了m次,所以總共比較了i×m次,因此

2.改進的模式匹配演算法kmp演算法

其基本思想是主串不進行回溯

結論: i可以不回溯,模式向右滑動到的新比較起點k ,並且k 僅與模式串t有關!

kmp演算法的偽**描述:

1. 在串s和串t中分別設比較的起始下標i和j;

2. 迴圈直到s或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中所有字元均比較完畢,則返回匹配的起始下標;否則返回0;

陣列是由型別相同的資料元素構成的有序集合,每個資料元素稱為乙個陣列元素,每個元素受n(n≥1)個線性關係約束,每個元素在n個線性關係中的序號i1,i2,……in稱為該元素的下標,並稱該陣列為n維陣列。

陣列的特點:元素本身可以具有某種結構,屬於同一資料型別;

陣列是乙個具有固定格式和數量的資料集合。

陣列的基本操作:

⑴ 訪問:給定一組下標,讀出對應的陣列元素;

⑵ 修改:給定一組下標,儲存或修改與其相對應的陣列元素。

訪問和修改操作本質上只對應一種操作——定址

常用的對映方法有兩種:

按行優先:先行後列,先儲存行號較小的元素,行號相同者先儲存列號較小的元素。

按列優先:先列後行,先儲存列號較小的元素,列號相同者先儲存行號較小的元素。

特殊矩陣:矩陣中很多值相同的元素並且它們的分布有一定的規律。 

稀疏矩陣:矩陣中有很多零元素。

壓縮儲存的基本思想是:

⑴ 為多個值相同的元素只分配乙個儲存空間;

⑵ 對零元素不分配儲存空間。

對角矩陣:所有非零元素都集中在以主對角線為中心的帶狀區域中,除了主對角線和它的上下方若干條對角線的元素外,所有其他元素都為零。

對角矩陣的壓縮儲存

稀疏矩陣的壓縮儲存

三元組表:將稀疏矩陣的非零元素對應的三元組所構成的集合,按行優先的順序排列成乙個線性表

儲存結構定義:

const int maxterm=100;

template

struct sparsematrix

;稀疏矩陣的壓縮儲存——十字鍊錶

採用鏈結儲存結構儲存三元組表,每個非零元素對應的三元組儲存為乙個鍊錶結點,結構為:

row:儲存非零元素的行號

col:儲存非零元素的列號

item:儲存非零元素的值

right:指標域,指向同一行中的下乙個三元組

down:指標域,指向同一列中的下乙個



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

第四章 字串和多維陣列 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 是乙個任意字元。...

《資料結構》第四章 字串和多維陣列 實驗

資料結構 實驗四 字串和多維陣列 實驗 一 實驗目的 鞏固字串和多維陣列相關知識,學會運用靈活應用。1.回顧字串和多維陣列的邏輯結構和儲存操作特點,字元和陣列的物理儲存結構和常見操作。2.學習運用字串和和陣列的知識來解決實際問題。3.進一步鞏固程式除錯方法。4.進一步鞏固模板程式設計。二 實驗時間 ...