#include<stdio.h>
#include <stdlib.h>
#include<time.h>
#include<string.h>
int a[100]={0};
typedef struct node{
int data;
struct node *next;
}node,*List;
void Build (List &L,int n)
{//随机产生数建立两个集合
srand(time(0));
L=(List)malloc(sizeof(node));
int i;
List p,s;
s=L;
for(i=0;i<n;i++)
{
p=(List)malloc(sizeof(node));
while (1)
{
p->data=rand()%89+10;
if (!a[p->data])
{
a[p->data]=1;
break;
}
}
s->next=p;
s=p;
p->next=NULL;
}
}
void show (List &L)
{
List p;
p=L->next;
if (!p)
{//判断集合是否为空
printf("Set is null!");
}
else
{
while(p)
{
if (p->data!=0)
printf("%d ",p->data);
p=p->next;
}
}
printf("\n");
}
void sort (List &L,int n)
{//对集合进行排序
int i,temp;
List p,q;
for(i=0;i<n;i++)
{
q=L->next;
p=q->next;
while(p)
{
if(p->data<q->data)
{
temp=p->data;
p->data=q->data;
q->data=temp;
}
p=p->next;
q=q->next;
}
}
}
void common (List &L1,List &L2,List &L3)
{//求交集
List p,q,s,s1;
p=L1->next;
L3=(List)malloc(sizeof(node));
L3->next=NULL;
s1=L3;
while(p)
{
q=L2->next;
while (q)
{
if(q->data==p->data)
{
s=(List)malloc(sizeof(node));
s->next=NULL;
s->data=p->data;
s1->next=s;
s1=s;
break;
}
q=q->next;
}
p=p->next;
}
}
void Union (List &L1,List &L2,List &L4)
{//求并集
List p,q,s,s1;
p=L1->next;
q=L2->next;
L4=(List)malloc(sizeof(node));
s1=L4;
while (p && q)
{
s=(List)malloc(sizeof(node));
if(p->data==q->data)
{
s->data=p->data;
s->next=NULL;
p=p->next;
q=q->next;
}
else if(p->data<q->data)
{
s->data=p->data;
s->next=NULL;
p=p->next;
}
else
{
s->data=q->data;
s->next=NULL;
q=q->next;
}
s1->next=s;
s1=s;
}
while(q)
{
s=(List)malloc(sizeof(node));
s->data=q->data;
s->next=NULL;
s1->next=s;
s1=s;
q=q->next;
}
while(p)
{
s=(List)malloc(sizeof(node));
s->data=p->data;
s->next=NULL;
s1->next=s;
s1=s;
p=p->next;
}
}
void Diff (List &L1,List &L2)
{//求差集
List p,q;
p=L1->next;
while(p)
{
q=L2->next;
while(q)
{
if(p->data==q->data)
{
p->data=0;
break;
}
q=q->next;
}
p=p->next;
}
}
int main ()
{
int n1,n2;
List L1,L2,L3,L4;
printf("输入集合A的元素个数:\n");
scanf("%d",&n1);
Build(L1,n1);
printf("集合A元素:\n");
show(L1);
printf("输入集合B的元素个数:\n");
scanf("%d",&n2);
memset (a,0,sizeof(a));
Build(L2,n2);
printf("集合B元素:\n");
show (L2);
printf ("排序后:\n A: ");
sort (L1,n1);
show(L1);
printf(" B: ");
sort (L2,n2);
show(L2);
printf("A∩B: ");
common(L1,L2,L3);
show(L3);
printf("AUB: ");
Union (L1,L2,L4);
show (L4);
printf("A-B: ");
Diff (L1,L2);
show(L1);
return 0;
}
集合的交、并、差运算
最新推荐文章于 2020-05-11 15:13:17 发布