用c语言写一段程序,完成集合的交运算
时间: 2024-11-27 17:15:55 浏览: 11
在 C 语言中,由于原生数据结构并不支持集合的操作,我们需要手动实现一个简单的集合结构,并提供交集运算的功能。这里我们可以使用数组作为集合的底层存储,通过遍历元素来判断是否包含在两个集合中。以下是一个基本的交集函数实现:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义集合结构体
typedef struct {
int* elements; // 存储元素的数组
int size; // 集合大小
} Set;
// 功能:初始化一个新的集合
Set create_set(int capacity) {
Set set;
set.elements = (int*)malloc(capacity * sizeof(int));
set.size = 0;
return set;
}
// 功能:向集合添加元素
void add_element(Set* set, int element) {
if (set->size == set->capacity) {
set->capacity *= 2; // 当容量不够时,扩大容量
set->elements = (int*)realloc(set->elements, set->capacity * sizeof(int));
}
set->elements[set->size++] = element;
}
// 功能:检查元素是否在集合中
bool contains(Set* set, int element) {
for (int i = 0; i < set->size; i++) {
if (set->elements[i] == element)
return true;
}
return false;
}
// 功能:计算两个集合的交集
Set intersect(const Set& set1, const Set& set2) {
Set result = create_set(0);
for (int i = 0; i < set1.size; i++) {
if (contains(set2, set1.elements[i])) {
add_element(&result, set1.elements[i]);
}
}
return result;
}
// 示例
int main() {
Set set1 = create_set(5);
add_element(&set1, 1); add_element(&set1, 2);
add_element(&set1, 3); add_element(&set1, 4); add_element(&set1, 5);
Set set2 = create_set(5);
add_element(&set2, 2); add_element(&set2, 3); add_element(&set2, 6);
Set intersection = intersect(set1, set2);
printf("Intersection of set1 and set2: ");
for (int i = 0; i < intersection.size; i++) {
printf("%d ", intersection.elements[i]);
}
printf("\n");
// 清理内存
free(intersection.elements);
free(set1.elements);
free(set2.elements);
return 0;
}
```
在这个例子中,我们创建了两个 `Set` 结构体并分别填充元素,然后使用 `intersect` 函数求它们的交集。注意这只是一个基础示例,实际应用中可能会更复杂,如使用链表或其他数据结构。
阅读全文