使用C/C++实现集合的交集、并集、补集运算
不墨迹,直接上代码,祝大家学习愉快。
#include<stdio.h>
#define MAX1 5
#define MAX2 4
void display(int a[],int n)//输出数组元素
{
printf("\n");
for(int i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
void complementary(int a[],int n,int b[],int m)//相对补集运算 假设全集为长度较长的数列
{
printf("补集: ");
if(n==m){printf("\n两数组长度相等,不符合条件,不进行补集运算\n");return;}
if(n>m)
{
int *t=a;
a=b;
b=t;
int temp=n;
n=m;
m=temp;
}
int c[MAX1+MAX2];//定义一个n+m长的数组用c[]来存储补集元素
int i,j,jj;//循环控制变量
i=0;
for(jj=0;jj<m;jj++)//进行筛选
{
int flag=1;
for(j=0;j<n;j++)
{
if(b[jj]==a[j]){flag=0;break;}
}
if(flag)c[i++]=b[jj];
}
display(c,i);//将补集数列输出
}
void intersection(int a[],int n,int b[],int m)//求数组a[]与数组b[]的交集
{
int c[MAX1+MAX2];//定义一个n+m长的数组用c[]来存储交集元素
int i,j,jj;//循环控制变量
i=0;
for(jj=0;jj<m;jj++)//进行筛选
{
int flag=0;
for(j=0;j<n;j++)
{
if(b[jj]==a[j]){flag=1;break;}
}
if(flag)c[i++]=b[jj];
}
printf("交集: ");
display(c,i);//将交集数列输出
}
void unionSets(int a[],int n,int b[],int m)//求数组a[]与数组b[]的并集
{
int c[MAX1+MAX2];//定义一个n+m长的数组用c[]来存储并集元素
if(n<m)
{
int *t=a;
a=b;
b=t;
int temp=n;
n=m;
m=temp;
}
int i,j,jj;//循环控制变量
for(i=0;i<n;i++)//首先将a[]中的元素依次放进c[]中
{
c[i]=a[i];
}
//此时的变量i的值为n,为接下来的筛选两个数列中的元素做铺垫
for(jj=0;jj<m;jj++)//进行筛选
{
int flag=1;
for(j=0;j<n;j++)
{
if(b[jj]==a[j]){flag=0;break;}
}
if(flag)c[i++]=b[jj];
}
printf("并集:");
display(c,i);//将并集数列输出
}
//接下来我们使用main测试一下
void main()
{
int a[MAX1]={1,5,2,6,7};//举例子
int b[MAX2]={1,4,5,6};//举例子
complementary(a,MAX1,b,MAX2);//调用补集运算函数
intersection(a,MAX1,b,MAX2);//调用交集运算函数
unionSets(a,MAX1,b,MAX2);//调用并集运算函数
}
今天的教程到此结束,望谅解,白天比较忙,只有晚上才有时间和大家交流学习,最后,祝大家圣诞节快乐。