資料結構實現順序串的各種模式匹配演算法

2021-09-29 03:11:03 字數 2224 閱讀 9175

建立目標串s=abcabcdabcdeabcdeabcdefabcdefg 和模式串 t =abcdeabcdefab

採用簡單匹配演算法求t在s中的位置

由模式串t求出next陣列值和nextval陣列值

採用kmp演算法求t在s中的位置

採用改進的kmp演算法t在s中的位置

我的資料結構github位址

#include

"string.h"

#include

"stdio.h"

#include

"stdlib.h"

#include

"io.h"

#include

"math.h"

#include

"time.h"

#define ok 1

#define error 0

#define true 1

#define false 0

#define maxsize 100

/* 儲存空間初始分配量 */

typedef

int status;

/* status是函式的型別,其值是函式結果狀態**,如ok等 */

typedef

int elemtype;

/* elemtype型別根據實際情況而定,這裡假設為int */

typedef

char string[maxsize +1]

;/* 0號單元存放串的長度 */

/* 生成乙個其值等於chars的串t */

status strassign

(string t,

char

*chars)

}status clearstring

(string s)

/* 輸出字串t。 */

void

strprint

(string t)

/* 輸出next陣列值。 */

void

nextprint

(int next,

int length)

/* 返回串的元素個數 */

intstrlength

(string s)

/* 樸素的模式匹配法 */

intindex

(string s, string t,

int pos)

else

/* 指標後退重新開始匹配 */}if

(j > t[0]

)return i - t[0]

;else

return0;

}/* 通過計算返回子串t的next陣列。 */

void

get_next

(string t,

int*next)

else

j = next[j]

;/* 若字元不相同,則j值回溯 */}}

/* 返回子串t在主串s中第pos個字元之後的位置。若不存在,則函式返回值為0。 */

/* t非空,1≤pos≤strlength(s)。 */

intindex_kmp

(string s, string t,

int pos)

else

/* 指標後退重新開始匹配 */

j = next[j]

;/* j退回合適的位置,i值不變 */}if

(j > t[0]

)return i - t[0]

;else

return0;

}/* 求模式串t的next函式修正值並存入陣列nextval */

void

get_nextval

(string t,

int*nextval)

else

j = nextval[j]

;/* 若字元不相同,則j值回溯 */}}

intindex_kmp1

(string s, string t,

int pos)

else

/* 指標後退重新開始匹配 */

j = next[j]

;/* j退回合適的位置,i值不變 */}if

(j > t[0]

)return i - t[0]

;else

return0;

}int

main()

資料結構 順序串的各種模式匹配演算法

如圖效果 kmp演算法中求t串的next值 void getnext sqstring t,int next 改進後kmp演算法中求t串的next值 void getnextval sqstring t,int next int main int j sqstring s,t strassign s...

實現順序串的各種模式匹配演算法

實驗題目 實現順序串的各種模式匹配演算法 實驗內容 實現順序串的各種模式匹配運算 1 建立目標串s abcabcdabcdeabcdefabcdefg 和模式串t abcdeabcdefab 2 採用簡單匹配演算法求t在s中的位置 3 由模式串t求出next值和nextval值 4 採用kmp演算法...

資料結構 串的順序表示和實現

上次寫鏈式串的時候就覺得太麻煩了,而且還不一定好用,今天就寫順序的果然方便很多。寫的串是常用的字串以及一些常用函式。全部自己原創的,如有不足還請指出。include using namespace std const int maxn int 1e6 7 typedef struct chunk c...