数据结构核心代码 day7

注:串其实是统考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(j
0||S[i]==T[j]){
++i;
++j;
}
else
j=next[j];
}
if(j>T[0])
return i-T[0];
else
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值