#include<stdio.h>
#include<stdlib.h>
typedef struct snode
{
char data;
struct snode *next;
}LiString;
/*字符常量cstr赋值给串s*/
void StrAssign(LiString *s, char cstr[])
{
LiString *p1;
LiString *p2;
char *p3=cstr;
s=(LiString *)malloc(sizeof(LiString)); //头结点
p2=s;
while(p3!='/0')
{
p1=(LiString *)malloc(sizeof(LiString));
p1->data=*p3;
p3++;
p2->next=p1;
p2=p1;
}
p2->next=NULL;
}
/*串链复制*/
void StrCopy(LiString *s, LiString *t)
{
LiString *p1;
LiString *p2;
LiString *p3=t->next;
s=(LiString *)malloc(sizeof(LiString));
p2=s;
while(p3->next!=NULL)
{
p1=(LiString *)malloc(sizeof(LiString));
p1->data=p3->data;
p3=p3->next;
p2->next=p1;
p2=p1;
}
p2->next=NULL;
}
/*判断两串链是否相等*/
int StrEqual(LiString *s, LiString *t)
{
LiString *p1=s->next;
LiString *p2=t->next;
while((p1!=NULL)&&(p2!=NULL)&&(p1->data==p2->data))
{
p1=p1->next;
p2=p2->next;
}
if((p1==NULL)&&(p2==NULL))
return 1;
return 0;
}
/*计算串联长度*/
int StrLength(LiString *s)
{
int length=0;
LiString *p=s->next;
while(p!=NULL)
{
length++;
p=p->next;
}
return length;
}
/*将两个串链接起来形成新的串链*/
LiString *Concat(LiString *s, LiString *t)
{
LiString *p1=s->next;
LiString *p2=t->next;
LiString *head, *p3, *p4;
head=(LiString *)malloc(sizeof(LiString));
p3=head;
while(p1!=NULL)
{
p4=(LiString *)malloc(sizeof(LiString));
p4->data=p1->data;
p3->next=p4;
p1=p1->next;
p3=p4;
}
while(p2!=NULL)
{
p4=(LiString *)malloc(sizeof(LiString));
p4->data=p2->data;
p3->next=p4;
p2=p2->next;
p3=p4;
}
p3->next=NULL;
return head;
}
LiString *SubStr(LiString *s, int i, int j)
{
return NULL;
}
/*将串t插入到s的第i个字符位置*/
LiString *InsStr(LiString *s, int i, LiString *t)
{
return NULL;
}
LiString *DelStr(LiString *s, int i, int j)
{
return NULL;
}
LiString *RepStr(LiString *s, int i, int j, LiString *t)
{
return NULL;
}
/*串链输出显示*/
void DispStr(LiString *s)
{
LiString *p=s->next;
while(p!=NULL)
{
printf("%c", p->data);
p=p->next;
}
printf("/n");
}
/*创建串链*/
void CreateStr(LiString *&s, int n)
{
int i;
LiString *p1, *p2;
s=(LiString *)malloc(sizeof(LiString));
p1=s;
for(i=0; i<n; i++)
{
p2=(LiString *)malloc(sizeof(LiString));
p2->data=i+0x30;
p1->next=p2;
p1=p2;
}
p1->next=NULL;
}
/*释放串链*/
void FreeStr(LiString *s)
{
LiString *p1, *p2;
p1=s;
p2=s->next;
while(p2!=NULL)
{
free(p1);
p1=p2;
p2=p2->next;
}
free(p2);
}
void main(void)
{
LiString *strList, *strList1=NULL, *strList2=NULL;
CreateStr(strList1, 10);
CreateStr(strList2, 40);
strList=Concat(strList1, strList2);
DispStr(strList);
FreeStr(strList1);
FreeStr(strList2);
FreeStr(strList);
}