c语言求两个集合的并集
时间: 2024-09-09 08:15:35 浏览: 100
在C语言中,计算两个集合的并集可以使用数组或者动态数据结构,如链表或哈希表。这里我将提供一种基本的线性算法示例,假设你已经有了两个整数数组,并且它们不会很大:
```c
#include <stdio.h>
// 定义一个函数计算并集
void union_of_arrays(int arr1[], int arr2[], int n1, int n2, int result[]) {
int i = 0, j = 0;
while (i < n1 && j < n2) {
if (arr1[i] < arr2[j]) {
result[i] = arr1[i];
i++;
} else if (arr1[i] > arr2[j]) {
result[j] = arr2[j];
j++;
} else { // 遇到相同的元素,只添加一次
result[j] = arr2[j];
i++; // 跳过已处理的元素
j++;
}
}
// 如果有剩余的元素,把剩下的数组加进去
while (i < n1) {
result[j++] = arr1[i++];
}
while (j < n2) {
result[j++] = arr2[j - n2 + n1]; // 注意这里的偏移
}
}
int main() {
int arr1[] = {1, 3, 5, 7};
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int arr2[] = {2, 4, 6, 8, 9};
int n2 = sizeof(arr2) / sizeof(arr2[0]);
int result[n1 + n2];
union_of_arrays(arr1, arr2, n1, n2, result);
printf("合并后的数组: ");
for (int i = 0; i < n1 + n2; i++) {
printf("%d ", result[i]);
}
return 0;
}
```
这个程序会创建一个新的数组`result`,并将两个输入数组的元素按升序合并在一起,去除重复项。注意这是最基础的并集算法,对于大规模的数据集,更高效的策略可能是使用哈希表或优先队列。
阅读全文