字串和多維陣列

2021-09-29 08:41:44 字數 3572 閱讀 8668

字串

字串支援順序儲存與鏈式儲存:

模式匹配:

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

模式匹配——bf演算法:

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

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

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

2.2 否則,將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

;}

模式匹配——kmp演算法 :i可以不回溯,模式向右滑動到的新比較起點k ,並且k 僅與模式串t有關!

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

迴圈直到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,準備下一趟比較;

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

;}

時間複雜性:o(n+m)

多維陣列

線性表——具有相同型別的資料元素的有限序列,將元素的型別進行擴充:

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

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

陣列的基本操作:

訪問和修改操作本質上只對應一種操作——定址,陣列沒有插入和刪除操作,所以,不用預留空間,適合採用順序儲存。

因此二維陣列的結構在記憶體上的對映為連續的一維結構:

常用的對映方法有兩種:(取決於編譯器):

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

按列優先:先列後行,先儲存列號較小的元素,列號相同者先儲存行號較小的元素。(如高階語言中的fortran語言)

矩陣的壓縮儲存:

特殊矩陣和稀疏矩陣:

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

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

壓縮儲存的基本思想是:

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

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

特殊矩陣:

對稱矩陣

對稱矩陣特點:aij=aji

利用下三角矩陣儲存:

aij在一維陣列中的序號

= i×(i-1)/2+ j

∵一維陣列下標從0開始

∴aij在一維陣列中的下標

k= i×(i-1)/2+ j-1

訪問壓縮矩陣:

對於下三角中的元素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。

對角矩陣 (帶狀矩陣):

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

先將a轉換為b型別進行矩陣壓縮.

bts=aij

t=i-1

s=j-i+1

如果我們考慮再對二維陣列進行一維陣列的轉化,用乙個一維的陣列儲存對角線上的非零元素:

以行序為主序,aij在一維陣列中的位址k:

k=(3(i-1)-1)+(j-i+1)

k=2i+j-3*

稀疏矩陣的壓縮儲存:

注意:稀疏矩陣中的非零元素的分布沒有規律。

將稀疏矩陣中的每個非零元素表示為:(行號,列號,非零元素值)——三元組.

定義三元組:

template struct element

;

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

三元組表:( (0,0,15), (1,1,11), (2,3,6), (4,0,9) )

採用順序儲存結構儲存三元組表:

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

;稀疏矩陣的十字鍊錶表示:

字串和多維陣列

一 字串 1 字串的定義 是零個或多個字串組成的有限序列,只包含空格的串稱為空格串。2 字串中任意個連續的字元組成的子串行稱為該穿的子串,包含子串的串稱為主串,子串的第乙個字元咋主串中的序號稱為子串在主串中的位置。3 模式匹配 給定兩個字串s和t,在主串s中尋找子串t的過程稱為模式匹配,t為模式。如...

字串和多維陣列

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

字串和多維陣列

intbf char s,char t else if t j 0 return start 1 else return0 int kmp char s,char p else if j plen return i j else return 1 陣列是乙個具有固定格式和數量的資料集合,在其上一般不...