#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define ERROR -1
#define OK 1
#define MAXSIZE 255
typedef unsigned char SString[MAXSIZE+1];//类型定义
int next[20];
void get_next(SString P, int next[ ]) {
int i=1,j=0; next[1]=0;
while(i<=7) {
if (j==0 || P[i]==P[j]) {++i; ++j; next[i]=j; }
else j=next[j];
}
}
int Index_KMP(SString S, SString T, int pos) {//KMP算法
int i=pos,j=1;
while(i<=S[0] && j<=T[0]) {
if (j==0 || S[i]==T[j]) {++i; ++j;}
else j=next[j];
}
if (j>T[0]) return i-T[0];
else return 0;
}//Index_KMP
int main(){
SString T = "xabababaabcacbababcadfdsss";
SString P = "xabaabcac";
T[0]=(int)25;
P[0]=(int)8;
get_next(P,next);
for(int i=1;i<=7;i++){
printf("%d ",next[i]);
}
puts("");
int a=1;
printf("%d ",Index_KMP(T,P,a));
return 0;
}
数据结构上机——KMP算法
最新推荐文章于 2022-10-26 15:00:00 发布