#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
char s;
struct LNode *next;
}Node,*LinkList;
LinkList L1;/*定义a 串的末字符的尾指针*/
LinkList Creat1(int n) /*创建表a的函数*/
{
LinkList p,q;
int i;
L1=(Node*)malloc(sizeof (Node));
L1->next=NULL;
q=L1;
for(i=n;i>0;--i)
{p=(Node*)malloc(sizeof (Node));
scanf("%c",p->s);
L1->next=p;
L1=L1->next;/*找到a 串的末字符的尾指针*/
}
L1->next=NULL;
return q;
}
LinkList Creat2(int n) /*创建表b的函数*/
{
LinkList L,p,q;
int i;
L=(Node*)malloc(sizeof (Node));
L->next=NULL;
q=L;
for(i=n;i>0;--i)
{p=(Node*)malloc(sizeof (Node));
scanf("%c",p->s);
L->next=p;
L=L->next;/*找到a 串的末字符的尾指针*/
}
L->next=NULL;
return q;
}
void print(LinkList C)
{
while(C!=NULL)
{
printf("%c\n",C->s);
C=C->next;
}
}
/*找两个字符串的并集,将b中与a不同的连到a的后面。合成一个并集*/
LinkList Merge(LinkList ha,LinkList hb,LinkList t)
{ LinkList r;
for(hb=hb->next;hb!=NULL;hb=hb->next)
{ for(r=ha->next;r!=t->next;r=r->next)
if(r->s != hb->s)
{t->next=hb;
t=t->next;
break;
}
}
t->next=NULL;
return ha->next;
}
main()
{ int x,y;
LinkList hA,hB,hc;
printf("InPut A NO:\n");/*Input a串数*/
scanf("%d",&x);
printf("Input a:\n");/*Input a串*/
hA= Creat1(x);
printf("InPut B NO:\n"); /*Input b串数*/
scanf("%d",&y);
printf("Input b:\n"); /*Input b串*/
hB= Creat2(y);
hc=Merge( hA, hB, L1);
print(hc);
getch();
}
/*出现的问题是我不会清空缓冲区,所以结果是乱码*/
[此贴子已经被作者于2006-4-18 1:07:51编辑过]