第四章字串和多維陣列

2021-06-27 16:22:40 字數 3168 閱讀 3393

4.1字串的定義

1.串——零個或多個字元組成的有限序列

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

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

空串:長度為0的串,記為:" "。

非空串通常記為:

s=" s1 s2 …… sn "

其中:s是串名,雙引號是定界符,雙引號引起來的部分是串值 ,si(1≤i≤n)是乙個任意字元。

1.1串的邏輯結構

子串:串中任意個連續的字元組成的子串行。

主串:包含子串的串。

子串的位置:子串的第乙個字元在主串中的序號。

串的資料物件約束為某個字符集。

微機上常用的字符集是標準ascii碼,由 7 位二進位制數表示乙個字元,總共可以表示 128 個字元。

擴充套件ascii碼由 8 位二進位制數表示乙個字元,總共可以表示 256 個字元,足夠表示英語和一些特殊符號,但無法滿足國際需要。

unicode由 16 位二進位制數表示乙個字元,總共可以表示 216個字元,能夠表示世界上所有語言的所有字元,包括亞洲國家的表意字元。為了保持相容性,unicode字符集中的前256個字元與擴充套件ascii碼完全相同。  

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。

4.1.2字串的儲存結構

方案1:用乙個變數來表示串的實際長度。

方案2:在串尾儲存乙個不會在串中出現的特殊字元作為串的終結符,表示串的結尾。 

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

4.1.3 模式匹配

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

模式匹配問題的特點

⑴ 演算法的一次執行時間不容忽視:問題規模通常很大,常常需要在大量資訊中進行匹配;

⑵ 演算法改進所取得的積累效益不容忽視:模式匹配操作經常被呼叫,執行頻率高。

2.bf演算法

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

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

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

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

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

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

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

else   

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

else return 0;

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

else   

}if (t[j]=='\0') return start;   

else return 0;

}4.2 多維陣列

4.2.1多維陣列的定義

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

2.多維陣列的特點 

元素本身可以具有某種結構,屬於同一資料型別;

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

4.2.2陣列的儲存結構及定址

一維陣列

設一維陣列的下標的範圍為閉區間[l,h],每個陣列元素占用 c 個儲存單元,則其任一元素 ai 的儲存位址可由下式確定: 

loc(ai)=loc(al)+(i-l)×c 

二維陣列

常用的對映方法有兩種:

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

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

n維陣列

n(n>2)維陣列一般也採用按行優先和按列優先兩種儲存方法。請自行推導任一元素儲存位址的計算方法。

4.3  矩陣的壓縮儲存

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

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

壓縮儲存的基本思想是:

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

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

2.特殊矩陣的壓縮儲存——對角矩陣 

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

3.對角矩陣的壓縮儲存

元素aij在一維陣列中的序號

=2 + 3(i-2)+( j-i + 2)

=2i+ j -2          

∵一維陣列下標從0開始

∴元素aij在一維陣列中的下標

= 2i+ j -3

4.稀疏矩陣的壓縮儲存 

將稀疏矩陣中的每個非零元素表示為:

(行號,列號,非零元素值)——三元組

emplate

struct element

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

5.稀疏矩陣的壓縮儲存——三元組順序表

儲存結構定義:

const int maxterm=100;

template

struct sparsematrix

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

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

row:儲存非零元素的行號

col:儲存非零元素的列號

item:儲存非零元素的值

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

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

第四章 字串和多維陣列

4.1字串的定義 1.串 零個或多個字元組成的有限序列 串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的串,記為 非空串通常記為 s s1 s2 sn 其中 s是串名,雙引號是定界符,雙引號引起來的部分是串值 si 1 i n 是乙個任意字元。1.1串的邏輯結構 子串...

第四章 字串 和多維陣列

4.1 字串 4.1.1 字串的定義 1 字串的定義 字串 是零個或者多個字元陣列的有限序列。空格傳 只包含空格的串。串中所包含的字元個數稱為串的長度,長度為0的串稱為空串。子串 字串中任意個連續的字元組成的子串行。2 字串的比較 通過組成串的字元之間的比較實現。4.1.2 字串的儲存結構 字串是資...

第四章字串和多維陣列

串 零個或多個字元組成的有限序列。串長度 串中所包含的字元個數。空串 長度為0的串,記為 非空串通常記為 s s1 s2 sn 其中 s是串名,雙引號是定界符,雙引號引起來的部分是串值 si 1 i n 是乙個任意字元。子串 串中任意個連續的字元組成的子串行。主串 包含子串的串。子串的位置 子串的第...