注:串其实是统考408大纲第6章的内容,串的内容不太要求写出代码,但要会手动模拟。
第四章 串
串的定义与实现
定长顺序存储表示
#define MAXLEN 255
typedef struct{
char ch[MAXLEN];//每个分量分配一个字符
int length;//串的实际长度
}SString;
堆分配存储表示
typedef struct{
char *ch//按串长度分配存储区 ch指向串的基地址
int length;//串的长度
}HString;
串的模式匹配
简单的模式匹配
int Index(SString S,SString T){
int i=1;j=1;
while(i<=S[0]&&j<=T[0]){
if(S[i]==T[j]){
++i;++j; //继续比较后继字符
}
else{
i=i-j+2;j=1; //指针后退重新开始匹配
}
}
if(j>T[0])
return i-T[0];
else
return 0;
}
KMP算法:
void get_next(char T[],int next[]){
i=1;
next[1]=0;
j=0;
while(i<=T[0]){ //T[0]用于保存字符串的长度
if(j==0||T[i]T[j]){
++i;++j;next[i]=j;
}
else
j=next[j];
}
}
int KMP(char S[],char T[],int next[],int pos){
i=pos;
j=1;
while(i<=S[0]&&j<=T[0]){
if(j0||S[i]==T[j]){
++i;
++j;
}
else
j=next[j];
}
if(j>T[0])
return i-T[0];
else
return 0;
}