链串

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档