集合的交并差运算c语言源代码
时间: 2024-09-18 19:13:34 浏览: 58
在C语言中,集合操作通常不是直接内置的,但我们可以自定义函数来模拟这种操作。以下是一个简单的示例,展示了如何使用数组来表示集合,并实现了交集、并集和差集的操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义集合结构体
typedef struct Set {
int* elements;
size_t size;
} Set;
// 动态分配元素
Set* createSet(size_t capacity) {
Set* set = (Set*)malloc(sizeof(Set));
if (!set) return NULL;
set->elements = (int*)calloc(capacity, sizeof(int));
set->size = 0;
return set;
}
// 添加元素到集合
void addElement(Set* set, int value) {
if (set->size == set->size - 1) {
// 扩大容量
set->elements = (int*)realloc(set->elements, (set->size + 1) * sizeof(int));
}
set->elements[set->size++] = value;
}
// 检查元素是否在集合中
int contains(Set* set, int value) {
for (size_t i = 0; i < set->size; ++i) {
if (set->elements[i] == value) return 1;
}
return 0;
}
// 交集函数
Set* intersection(Set* set1, Set* set2) {
Set* result = createSet(0);
for (int val : set1->elements) {
if (contains(set2, val)) {
addElement(result, val);
}
}
return result;
}
// 并集函数
Set* unionSet(Set* set1, Set* set2) {
Set* result = createSet(set1->size + set2->size);
for (size_t i = 0; i < set1->size; ++i) {
addElement(result, set1->elements[i]);
}
for (size_t j = 0; j < set2->size; ++j) {
addElement(result, set2->elements[j]);
}
return result;
}
// 差集函数(set1减去set2)
Set* difference(Set* set1, Set* set2) {
Set* result = createSet(set1->size);
for (size_t i = 0; i < set1->size; ++i) {
if (!contains(set2, set1->elements[i])) {
addElement(result, set1->elements[i]);
}
}
return result;
}
// 释放内存
void destroySet(Set* set) {
free(set->elements);
free(set);
}
// 示例
int main() {
Set* s1 = createSet(5); // {1, 2, 3, 4, 5}
Set* s2 = createSet(5); // {3, 4, 5, 6, 7}
addElement(s1, 1);
addElement(s1, 2);
addElement(s2, 5);
addElement(s2, 6);
printf("Intersection: ");
Set* intersect = intersection(s1, s2);
for (size_t i = 0; i < intersect->size; ++i) {
printf("%d ", intersect->elements[i]);
}
destroySet(intersect);
printf("\nUnion: ");
Set* unionResult = unionSet(s1, s2);
for (size_t i = 0; i < unionResult->size; ++i) {
printf("%d ", unionResult->elements[i]);
}
destroySet(unionResult);
printf("\nDifference: ");
Set* diffResult = difference(s1, s2);
for (size_t i = 0; i < diffResult->size; ++i) {
printf("%d ", diffResult->elements[i]);
}
destroySet(diffResult);
return 0;
}
阅读全文
相关推荐

















