建立目標串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...