电子说
除了顺序串,还有链串,所谓链串,就是链式存储的字符串。
下面是链串的简单实现
// 链串
#include
#include
typedef struct snode
{ char data;
struct snode *next;
} LinkStrNode;
//生成串
void StrAssign(LinkStrNode *s,char cstr[])
{ int i;
LinkStrNode *r,*p;
s=(LinkStrNode *)malloc(sizeof(LinkStrNode));
r=s; //r始终指向尾结点
for (i=0;cstr[i]!='\\0';i++)
{ p=(LinkStrNode *)malloc(sizeof(LinkStrNode));
p->data=cstr[i];
r->next=p; r=p;
}
r->next=NULL; //尾结点next域置为空
}
void DestroyStr(LinkStrNode *s)
{ LinkStrNode *pre=s,*p=s->next; //pre指向结点p的前驱结点
while (p!=NULL) //扫描链串s
{ free(pre); //释放pre结点
pre=p; //pre、p同步后移一个结点
p=pre->next;
}
free(pre);
}
LinkStrNode *Concat(LinkStrNode *s,LinkStrNode *t)
{ LinkStrNode *str,*p=s->next,*q,*r;
str=(LinkStrNode *)malloc(sizeof(LinkStrNode));
r=str; //r指向结果串的尾结点
while (p!=NULL) //用p扫描s的所有数据结点
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=p->data; //将p结点复制到q结点中
r->next=q;r=q; //将q结点链接到str的末尾
p=p->next;
}
p=t->next;
while (p!=NULL) //用p扫描t的所有数据结点
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=p->data; //将p结点复制到q结点中
r->next=q;r=q; //将q结点链接到str的末尾
p=p->next;
}
r->next=NULL; //尾结点的next域置为空
return str;
}
// 查询子串
void Repl(LinkStrNode *s)
{
LinkStrNode *p=s->next, *q;
int find=0;
while (p->next!=NULL && find==0) //查找ab子串
{
if (p->data=='a' && p->next->data=='b')
{ p->data='x'; p->next->data='z';
q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data='y'; q->next=p->next; p->next=q;
find=1;
}
else p=p->next;
}
}
// 查询子串
int index(SqString s,SqString t)
{ int i,j,k;
for (i=0;i<=s.length-t.length;i++)
{ for (k=i,j=0; k
上述代码是对伪代码的简单实现,没有语法错误,可作为参考用例。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !