C语言求两个数组交集和并集
时间: 2025-06-22 07:38:53 浏览: 1
在C语言中,求两个数组的交集和并集可以通过哈希集合的数据结构(如链表、散列表等)来实现。以下是基本步骤:
1. **求交集**:
- 首先,遍历第一个数组,将每个元素添加到一个哈希集合(例如`std::unordered_set`)中,去除重复值。
- 然后,遍历第二个数组,检查每个元素是否已经在哈希集合中存在,如果存在,则表示是交集的一部分,将其添加到结果数组中。
- 最后返回这个包含交集元素的结果数组。
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
bool is_in_set(int set[], int size, int element) {
for (int i = 0; i < size; i++) {
if (set[i] == element)
return true;
}
return false;
}
void find_intersection(int arr1[], int arr1_size, int arr2[], int arr2_size, int* result, int* size) {
std::unordered_set<int> hash_set;
for (int i = 0; i < arr1_size; i++)
hash_set.insert(arr1[i]);
*size = 0;
for (int j = 0; j < arr2_size; j++) {
if (is_in_set(hash_set, arr1_size, arr2[j])) {
result[*size++] = arr2[j];
}
}
}
// 示例
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {4, 5, 6, 7, 8};
int intersection[10], intersect_size = 0;
find_intersection(arr1, sizeof(arr1)/sizeof(arr1[0]), arr2, sizeof(arr2)/sizeof(arr2[0]), intersection, &intersect_size);
printf("Intersection: ");
for (int i = 0; i < intersect_size; i++)
printf("%d ", intersection[i]);
printf("\n");
return 0;
}
```
2. **求并集**:
- 同样使用哈希集合存储第一个数组的所有元素。
- 再次遍历第二个数组,如果元素不在集合中,则添加到结果数组中,并更新哈希集合。
- 返回最终的结果数组。
```c
void find_union(int arr1[], int arr1_size, int arr2[], int arr2_size, int* result, int* size) {
std::unordered_set<int> hash_set;
for (int i = 0; i < arr1_size; i++)
hash_set.insert(arr1[i]);
*size = arr1_size;
for (int j = 0; j < arr2_size; j++) {
if (!hash_set.count(arr2[j]))
result[*size++] = arr2[j];
hash_set.insert(arr2[j]);
}
}
// 示例
int main() {
// 使用相同的示例数组
// 结果会是arr1加上arr2中独有的元素
int union_array[10], union_size = sizeof(arr1)/sizeof(arr1[0]);
find_union(arr1, sizeof(arr1)/sizeof(arr1[0]), arr2, sizeof(arr2)/sizeof(arr2[0]), union_array, &union_size);
printf("Union: ");
for (int i = 0; i < union_size; i++)
printf("%d ", union_array[i]);
printf("\n");
return 0;
}
```
阅读全文
相关推荐


















