已知集合A={7,5,4,3},集合B={2,6,3}, 求集合A和B的并集,用c语言
时间: 2024-09-17 16:07:07 浏览: 20
在C语言中,你可以使用标准库函数`stdlib.h`中的`malloc()`和`realloc()`动态分配内存,并结合数组操作来求两个集合的并集。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体存储元素及其出现次数
typedef struct {
int value;
int count;
} Element;
void mergeAndCount(int a[], int b[], int n1, int n2, Element* result) {
int i = 0, j = 0, k = 0;
// 比较两个集合中的元素
while (i < n1 && j < n2) {
if (a[i] < b[j]) {
result[k].value = a[i];
result[k++].count = 1;
i++;
} else if (a[i] > b[j]) {
result[k].value = b[j];
result[k++].count = 1;
j++;
} else { // 如果相等,从两边各加一次
result[k].value = a[i];
result[k++].count = 2;
i++;
j++;
}
}
// 将剩余的元素添加到结果数组
while (i < n1) {
result[k].value = a[i];
result[k++].count = 1;
i++;
}
while (j < n2) {
result[k].value = b[j];
result[k++].count = 1;
j++;
}
}
int main() {
int A[] = {7, 5, 4, 3};
int B[] = {2, 6, 3};
int nA = sizeof(A) / sizeof(A[0]);
int nB = sizeof(B) / sizeof(B[0]);
// 初始化结果数组
Element* result = malloc((nA + nB) * sizeof(Element));
int resultIndex = 0;
mergeAndCount(A, B, nA, nB, result);
printf("并集: ");
for (int i = 0; i < resultIndex; i++) {
for (int j = 0; j < result[i].count; j++) {
printf("%d ", result[i].value);
}
}
free(result); // 释放内存
return 0;
}
```
这个程序首先计算出A和B两集合的元素总数,然后创建一个新的`Element`数组来存放结果。通过两次循环,一次比较并合并元素,另一次将剩余未加入的结果复制过来。最后打印出并集,并记得释放动态分配的内存。
运行上述代码,你会得到集合A和B的并集:{2, 3, 4, 5, 6, 7}`。