链串
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
typedef struct snode
{
char data;
struct snode *next;
} LiString;
void StrAssign(LiString *&s,char t[]) //初始化
{
int i;
LiString *r,*p; //p是用来产生新节点的
s=(LiString *)malloc(sizeof(LiString));
s->next=NULL;
r=s;
for (i=0;t[i]!='\0';i++)
{
p=(LiString *)malloc(sizeof(LiString));
p->data=t[i];
p->next=NULL; //一定要先分配新生节点的数据域与指针域
r->next=p;
r=p;
}
}
void StrCopy(LiString *&s,LiString *t) //复制
{
LiString *p=t->next/*使p指向t的第一个节点*/,*q,*r;
s=(LiString *)malloc(sizeof(LiString)); //为s分配内存空间,并说明指针域s->next=NULL;
r=s;
while (p!=NULL) //将t的所有结点复制到s
{
q=(LiString *)malloc(sizeof(LiString));
q->data=p->data;
q->next=NULL;
r->next=q;
r=q;
p=p->next;
}
}
int StrEqual(LiString *s,LiString *t)
{
LiString *p=s->next,*q=t->next;
while (p!=NULL && q!=NULL && p->data==q->data)
{
p=p->next;
q=q->next;
}
if (p==NULL && q==NULL)
return 1;
else
return 0;
}
int StrLength(LiString *s)
{
int i=0;
LiString *p=s->next;
while (p!=NULL)
{
i++;p=p->next;
}
return i;
}
LiString *Concat(LiString *s,LiString *t)
{
LiString *str,*p=s->next,*q,*r;
str=(LiString *)malloc(sizeof(LiString));
str->next=NULL;r=str;
while (p!=NULL) //将s的所有结点复制到str {
q=(LiString *)malloc(sizeof(LiString));
q->data=p->data;q->next=NULL;
r->next=q;r=q;
p=p->next;
}
p=t->next;
while (p!=NULL) //将t的所有结点复制到str {
q=(LiString *)malloc(sizeof(LiString));
q->data=p->data;q->next=NULL;
r->next=q;r=q;
p=p->next;
}
return str;
}
LiString *SubStr(LiString *s,int i,int j)
{
int k;
LiString *str,*p=s->next,*q,*r;
str=(LiString *)malloc(sizeof(LiString));
str->next=NULL;r=str;
if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))
{
printf("参数不正确\n");
return str; //参数不正确时返回空串
}
for (k=0;k p=p->next; for (k=1;k<=j;k++) //将s的第i个结点开始的j个结点复制到str { q=(LiString *)malloc(sizeof(LiString)); q->data=p->data;q->next=NULL; r->next=q;r=q; p=p->next; } return str; } LiString *InsStr(LiString *s,int i,LiString *t) { int k; LiString *str,*p=s->next,*p1=t->next,*q,*r; str=(LiString *)malloc(sizeof(LiString)); str->next=NULL;r=str; if (i<=0 || i>StrLength(s)+1) //参数不正确时返回空串 { printf("参数不正确\n"); return str; } for (k=1;k { q=(LiString *)malloc(sizeof(LiString)); q->data=p->data;q->next=NULL; r->next=q;r=q; p=p->next; } while (p1!=NULL) //将t的所有结点复制到str { q=(LiString *)malloc(sizeof(LiString)); q->data=p1->data;q->next=NULL; r->next=q;r=q; p1=p1->next; }