C语言代码实现交集运算
时间: 2024-11-07 13:09:25 浏览: 20
在C语言中,实现两个集合(通常用数组或动态数组表示)的交集运算可以采用哈希表或者排序后查找的方式来完成。这里我们提供一个简单的哈希表(使用布尔数组)方法,假设集合中元素都是无序且唯一的:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 假设集合最大大小
typedef struct {
int index; // 集合中的索引位置
int value; // 数值
} Item;
// 哈希表初始化
int hash[MAX_SIZE] = {0};
void insert(int value) {
if (value < MAX_SIZE && !hash[value]) {
hash[value] = 1;
}
}
// 查找并插入交集
void intersect(const Item* set1, const Item* set2, int size1, int size2) {
for (int i = 0; i < size1; i++) {
if (hash[set1[i].value]) {
printf("%d ", set1[i].value); // 如果在set2中有,打印出来
} else {
insert(set1[i].value);
}
}
// 更新hash表,只保留set2中存在的元素
for (int i = 0; i < size2; i++) {
if (hash[set2[i].value]) {
hash[set2[i].value] = 1;
}
}
}
int main() {
Item set1[] = {{1, 5}, {2, 6}, {3, 7}};
Item set2[] = {{3, 7}, {4, 8}, {5, 9}};
int size1 = sizeof(set1) / sizeof(set1[0]);
int size2 = sizeof(set2) / sizeof(set2[0]);
intersect(set1, set2, size1, size2);
return 0;
}
```
这个程序首先初始化一个大小为MAX_SIZE的布尔数组作为哈希表,然后遍历第一个集合,在哈希表中标记遇到的元素。接着,再遍历第二个集合,如果元素已经在哈希表中,则认为是交集元素并打印。最后更新哈希表,仅保留第二个集合中存在的元素。
阅读全文