資料結構 串的知識總結,BF,KMP演算法

2021-10-25 01:16:18 字數 2463 閱讀 7030

常見基礎概念

串長:串中字元個數,有時還常用a[0]/length來儲存串長

注意空串和空格串的區別

空串是長度為0的串,而空格串是由多個或乙個空格字元組成的字串

子串與主串:串s中任意個連續字串行叫s的子串,s稱為主串

子串位置: 子串的第乙個字元在主串中的序號(序號從1開始)

字元位置:字元在串中的序號

串相等:長度和對應字元均相等

類c中的常見操作

c語言中提供的操作函式

int strcmp(char *s1,char *s2)//串比較

int strlen(char *s1)//求串長

char strcat(char *to,char *from)//串連線

char strchr(char *s,char *c)//模式識別

//詳見c語言程式設計

定長儲存

#define maxstrlen 255

typedef

unsigned

char sstring[maxstlen+

1]sstring;

sstring s;

//s是乙個能夠容納255字元的順序串

順序儲存方式實現substring(&sub,s,pos,len)

//這裡以int型為例,且預設sub為空陣列

intsubstring

(sstring sub,sstring s,

int pos,

int len)

//這裡sstring相當於char ssring,詳見typedef的用法

sub[0]

=len;

return0;

}

堆分配的儲存結構

typedef

struct

hstring;

//堆分配是採用了mallco預設串長度,用realloc增加長度,用free釋放空間

intstrassign

(hstring *t,

char

*chars)

//判斷chars是否為空

else

//這裡t->ch[0}沒有用來裝串長

}return0;}

//賦值函式

利用堆方式編寫串插入函式

int

strinsert

(hstring *s,

int pos,hstring t)

return0;

}

鏈式儲存

塊鏈的寫法

#define size 100

typedef

struct chunkchunk,

*listchunk;

bf演算法的實現

將主串s的第pos個字元和模式t的第乙個字元比較,若相等,繼續逐個比較後續字元;若不相等,從主串的下乙個字元(pos+1)起,重新與t第乙個字元比較,直到匹配成功,返回s中與t匹配子串行第乙個字元的序號。否則返回0

//bf演算法的實現

intindex_bp

(sstring s,sstring t,

int pos)

else}if

(j>t[0]

)return

(i-t[0]

);else

return0;

}

kmp演算法(優化,i不再回溯,j的回溯距離變短)

關鍵在於next[j]的求解

//採用了遞推法求next[j]

void

get_next

(sstring t,

int next)

else j=next[j]

;//從類似於kmp的求解,t為主串和模式串

}演算法實現

intindex_kmp

(sstring s,sstring t,

int pos)

//省略

資料結構實驗四 串的模式匹配BF KMP

include include stdio.h include stdlib.h include cstdlib syste 函式需要該標頭檔案 using namespace std define ok 1 define error 0 define overflow 2 typedef int ...

21資料結構 串知識整理

4.2 串的模式匹配演算法 串是由零個或多個字元組成的有限序列。串中的個數稱為串的串的長度,含有零個元素的串叫做空串。char str abcdef 輸出字元直接 cout namespace std intmain str 10 0 莫失莫忘,仙壽恆昌!cout 輸出結果 0123456789字串...

資料結構知識點總結

1 樹 森林 和二叉樹可以相互轉化,規則是 左孩子右兄弟 即當前節點的左孩子在由二叉樹轉化為樹的過程中,左孩子還是當前節點的左孩子,而右節點會變成當前節點的兄弟。2 設二叉樹度為0的節點有n0個,度為2的節點為n2,則n2 n0 1 1 無向圖的資料結構是鄰接多重表,有向圖的資料結構是十字鍊錶。二者...