字串和陣列

2021-09-29 13:42:46 字數 2387 閱讀 6001

一、字串儲存

1.串的邏輯結構:

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

主串:包含子串的串。

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

2.串的儲存結構:

順序串:用陣列來儲存串中的字串行。 有三種方法可以表示串的長度: 1)用乙個變數來表示串的實際長度。

2)在串尾儲存乙個不會在串**現的特殊字元作為串的終結符,表示串的結尾。 3)用陣列的0號單元存放串的長度,從1號單元開始存放串值。

鏈結串:用鏈結儲存結構來儲存串。

二、模式匹配

模式匹配:給定主串s="s1s2…sn"和模式t=「t1t2…tm」,在s中尋找t 的過程。

如果匹配成功,返回t在s中的位置,如果匹配失敗,返回-1。

假設串採用順序儲存結構,串值從0號單元開始存放。

1)bf演算法

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

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

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

否則,將i和j回溯(i=i-j+1,j=0),準備下一趟比較;

如果t中所有字元均比較完,則匹配成功,返回匹配的起始比較下標(i-j);否則,匹配失敗,返回-1;

intbf(

char s,

char t)

else}if

(j>=t.

length()

)return

(i-j)

;else

return-1

;}

2)kmp演算法

可以不回溯,模式滑動到新的比較起點k,k僅與模式串t有關。

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

迴圈直到s中所剩字元長度小於t的長度或t中所有字元均比較完畢。

如果s[i]==t[j],繼續比較s和t的下乙個字元;否則將j向右滑動到next[j]位置,即j=next[j];

如果j=-1,則將i和j分別加1,準備下一趟比較;

如果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

;}

三、陣列的邏輯結構特徵

1.多維陣列:線性表中的資料元素可以是線性表,但所有元素的型別相同。

2.廣義表:線性表中的資料元素可以是線性表,且廣義元素的型別可以不同。

3.陣列沒有插入和刪除操作,所以不用預留空間,適合採用順序儲存。

四、陣列的儲存方式及定址方法

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

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

陣列儲存在記憶體中始終都是一維儲存。

五、特殊矩陣和稀疏矩陣的壓縮儲存方法

1.特殊矩陣

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

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

3)壓縮儲存的基本思想是:

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

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

對稱矩陣的壓縮儲存:

對稱矩陣關於主對角線對稱,因此只需儲存下三角部分即可。這樣,原來需要nn個儲存單元,現在只需n(n+1)/2個儲存單元,節約了大約一半的儲存單元。當n較大時,這是客觀的一部分儲存單元。

三角矩陣的壓縮儲存

下三角矩陣的壓縮儲存與對稱矩陣類似,不同之處僅在於儲存下三角中的元素以外,還要儲存對角線上方的常數。因為是同乙個常數,所以只儲存乙個即可。這樣,共儲存n*(n+1)/2+1個元素,將其按行優先存入陣列sa[n*(n+1)/2+1]中。

下三角矩陣中任一元素a(ij)在sa中的下標k與i、j的對應關係為:

當i>=j時,k=i*(i-1)/2+j-1;

當ij時,k=n(n+1)/2

對角矩陣的壓縮儲存

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

對於乙個m*n的w對角矩陣(w是占有非零元素的對角線的個數,也稱頻寬),一種壓縮方法是將其壓縮到乙個m行w列的二維陣列b中,則a(ij)對映為b(ts),其對映關係為:

(1) t=i

(2) s=j-i+2

稀疏矩陣的壓縮儲存

將稀疏矩陣的非零元素對應的三元組成所構成的集合,按行優先的順序排列成乙個線性表,稱為三元組表,則稀疏矩陣的壓縮儲存轉化為三元組表的儲存。

字串和陣列

串的儲存結構 用陣列來儲存串中的字串行。串的長度 方案1 用乙個變數來表示串的實際長度。方案2 在串尾儲存乙個不會在串 現的特殊字元作為串的終結符,表示串的結尾。方案3 用陣列的0號單元存放串的長度,從1號單元開始存放串值。非壓縮結構 乙個結點只儲存乙個字元 壓縮結構 乙個結點儲存多個字元 模式匹配...

字串 向量和陣列

迭代器介紹 陣列定義和初始化string物件 string物件上的操作 處理string物件中的字元 定義和初始化 vector v1 vector v2 v1 v2中包含有v1中所有元素的副本 vector v2 v1 等價於v2 v1 vector v3 n,va1 v3包含n個重複的v1 ve...

PHP字串和陣列

todo 字串替換 dump str replace a b aaa count dump count todo 分割字串 字串轉陣列 dump explode a,b,c,d todo 拼接陣列的值 陣列組轉字串 dump implode array a b c d todo 格式化輸出 dump...