串的存储结构
串的定长顺序存储结构
typedef struct
{
char ch[MAXLEN+1];
int length;
}SString;
串的堆式顺序存储结构
typedef struct
{
char *ch;
int length;
}HString;
串的链式存储结构
#define CHUNKSIZE 80
typedef struct Chunk
{
char ch[CHUNKSIZE];
struct Chunk *next;
}Chunk;
typedef struct
{
Chunk *head,*tail;
int length;
}LString;
串的模式匹配算法
BF算法
int Index_BF(SString S,SString T,int pos)
{
int i,j;
i=pos;j=1;
while(i<=S.length&&j<=T.length)
{
if(S.ch[i]==T.ch[j]){++i;++j;}
else{i=i-j+2;j=1;}
}
if(j>T.length)return i-T.length;
else return 0;
}
KMP算法
void get_next(SString T,int next[])
{
int i,j;
i=1;next[1]=0;j=0;
while(i<T.length)
{
if(j==0||T.ch[i]==T.ch[j]){++i;++j;next[i]=j;}
else j=next[j];
}
}
void get_nextval(SString T,int nextval[])
{
int i,j;
i=1;nextval[1]=0;j=0;
while(i<T.length)
{
if(j==0||T.ch[i]==T.ch[j])
{
++i;++j;
if(T.ch[i]!=T.ch[j])nextval[i]=j;
else nextval[i]=nextval[j];
}
else j=nextval[j];
}
}
int Index_KMP(SString S,SString T,int pos)
{
int i,j;
i=pos;j=1;
while(i<=S.length&&j<=T.length)
{
if(j==0||S.ch[i]==T.ch[j]){++i;++j;}
else j=next[j];
}
if(j>T.length)return i-T.length;
else return 0;
}