#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data;
struct Node*next;
}*linklist;
void readdata(linklist head)
{
linklist p;
char a;
scanf("%c",&a);
while(a!='\n'&&a>='a'&&a<='z')
{
p=(linklist)malloc(sizeof(struct Node));
p->data=a;
p->next=head->next;
head->next=p;
scanf("%c",&a);
}
}
void pop(linklist head)
{
linklist p;
p=head->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
void Insection(linklist head1,linklist head2,linklist head3)
{
linklist p1,p2,p3;
p1=head1->next;
while(p1!=NULL)
{
p2=head2->next;
while((p2!=NULL)&&(p2->data!=p1->data))
p2=p2->next;
if((p2!=NULL)&&(p2->data==p1->data))
{
p3=(linklist)malloc(sizeof(struct Node));
p3->data=p1->data;
p3->next=head3->next;
head3->next=p3;
}
p1=p1->next;
}
}
void Deprive(linklist head1,linklist head2,linklist head3)
{
linklist p1,p2,p3;
p1=head1->next;
while(p1!=NULL)
{
p2=head2->next;
while((p2!=NULL)&&(p2->data!=p1->data))
p2=p2->next;
if(p2==NULL)
{
p3=(linklist)malloc(sizeof(struct Node));
p3->data=p1->data;
p3->next=head3->next;
head3->next=p3;
}
p1=p1->next;
}
}
void Merge(linklist head1,linklist head2,linklist head3)
{
linklist p1,p2,p3;
p1=head1->next;
p2=head2->next;
Deprive(head1,head2,head3);
}
void main(linklist head1,linklist head2,linklist head3)
{
int x;
printf("输入完成后请按回车键\n");
head1=(linklist)malloc(sizeof(struct Node));
head1->next=NULL;
head2=(linklist)malloc(sizeof(struct Node));
head2->next=NULL;
head3=(linklist)malloc(sizeof(struct Node));
head3->next=NULL;
printf("请输入集合一\n");
readdata(head1);
printf("请输入集合二 \n");
readdata(head2);
A:printf("1.交集 2.并集 3.差集 4.退出\n");
do{
printf("请选择序号\n");
scanf("%d",&x);
switch(x)
{
case 1:
printf("两个集合的交集是\n");
Insection(head1,head2,head3);
pop(head3);
head3->next=NULL;
break;
case 2:
printf("两个集合的并集是 \n");
Merge(head1,head2,head3);
pop(head3);
head3->next=NULL;
break;
case 3:
printf("两个集合的差集是\n");
Deprive(head1,head2,head3);
pop(head3);
head3->next=NULL;
break;
case 4: break;
default:goto A;
}
}while(x!=4);
}