字串
字串支援順序儲存與鏈式儲存:
模式匹配:
給定主串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 陣列是乙個具有固定格式和數量的資料集合,在其上一般不...