c语言编程集合的并集,集合:求A、B两个集合的交集、并集和补集的代码(C语言)...

集合:求A、B两个集合的交集、并集和补集的代码(C语言)

#include

#define N 100

main(){

int a[N],b[N],c[N],d[N];

int aa[N],bb[N];

int i,j,k=1;

int x=1,y=1,z;

int m,n;

int flag;

printf("please input Number of A:\n");

scanf("%d",&m);

printf("please input A:\n");

for(i=1;i<=m;i++){

scanf("%d",&a[i]);

}

printf("please input Number of B:\n");

scanf("%d",&n);

printf("please input B:\n");

for(i=1;i<=n;i++){

scanf("%d",&b[i]);

}

for(i=1;i<=m;i++){

flag=0;

for(j=1;j<=n;j++){

if(a[i]==b[j]){c[k]=a[i];k++;flag=1;continue;}

}

if(flag==0){

aa[x]=a[i];x++;}

}

for(i=1;i<=n;i++){

flag=0;

for(j=1;j<=m;j++){

if(a[j]==b[i]){flag=1;continue;}

}

if(flag==0){

bb[y]=b[i];y++;}

}

printf("A-A与B的交集:共%d个\n",x-1);

for(i=1;i

printf("B-A与B的交集:共%d个\n",y-1);

for(i=1;i

printf("A与B的交集:共%d个\n",k-1);

for(i=1;i

printf("A与B的并集:共%d个\n",x+y+k-3);

for(i=1;i

for(i=1;i

for(i=1;i

}

测试例:

4

1 2 3 4

8

1 3 4 5 6 7 8 9

运行结果:

a7242de2efbb25edfddc8249c0567e15.png

在C语言中,我们可以使用数组或者动态分配内存的结构体来创建集合的数据结构,实现交集的操作。这里我将简述如何分别实现这三种操作的基本思路: 1. **定义集合的数据结构**: ```c #include <stdio.h> #include <stdlib.h> typedef struct Set { int *array; // 数组存储元素 int size; // 集合大小 } Set; ``` 2. **初始化集合**: ```c Set* createSet(int capacity) { Set *set = (Set*)malloc(sizeof(Set)); set->array = (int*)malloc(capacity * sizeof(int)); set->size = 0; return set; } void addElement(Set *set, int element) { if(set->size < set->capacity) { set->array[set->size] = element; set->size++; } } ``` 3. **交集操作** (假设`A``B`是两个已排序的集合): ```c void intersection(Set *A, Set *B, Set *result) { int i = 0, j = 0, k = 0; while(i < A->size && j < B->size) { if(A->array[i] == B->array[j]) { result->addElement(result, A->array[i]); // 或者直接把值添加到result集合 i++, j++; // 移动指针 } else if(A->array[i] < B->array[j]) i++; else j++; } } ``` 4. **操作**: ```c void unionSet(Set *A, Set *B, Set *result) { for(int i = 0; i < A->size; i++) result->addElement(result, A->array[i]); for(int j = 0; j < B->size; j++) result->addElement(result, B->array[j]); } ``` 5. **差操作** (A - B, A 中B中没有的元素): ```c void difference(Set *A, Set *B, Set *result) { for(int i = 0; i < A->size; i++) { int found = 0; for(int j = 0; j < B->size; j++) { if(A->array[i] == B->array[j]) found = 1; } if(!found) result->addElement(result, A->array[i]); } } ``` 注意,以上代码未处理集合大小变化的情况,实际应用中需要考虑扩容或缩小的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值