c语言写两个集合的交集,差集,并集
时间: 2024-10-09 22:03:59 浏览: 33
c++程序设计实现集合交集并集差集.pdf
5星 · 资源好评率100%
在C语言中,可以使用标准库函数以及自定义数据结构来处理集合的交、并、差操作。这里我们通常会使用数组或动态内存分配存储集合元素,然后遍历比较来完成计算。
首先,我们定义一个简单的集合结构,比如使用整数数组表示:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *arr; // 存储集合元素的指针
int size; // 集合大小
} Set;
// 添加元素到集合
void add(Set *set, int value) {
if (set->size == set->arr capacity) {
set->arr = realloc(set->arr, sizeof(int) * (set->size * 2)); // 扩容
}
set->arr[set->size++] = value;
}
// 查找元素是否在集合内
int contains(Set *set, int value) {
for (int i = 0; i < set->size; i++) {
if (set->arr[i] == value)
return 1;
}
return 0;
}
// 计算交集
Set* intersection(Set *set1, Set *set2) {
Set *result = malloc(sizeof(Set));
result->arr = NULL;
result->size = 0;
for (int i = 0; i < set1->size && i < set2->size; i++) {
if (contains(set2, set1->arr[i])) {
add(result, set1->arr[i]);
}
}
return result;
}
// 计算差集
Set* difference(Set *set1, Set *set2) {
Set *result = malloc(sizeof(Set));
result->arr = NULL;
result->size = 0;
for (int i = 0; i < set1->size; i++) {
if (!contains(set2, set1->arr[i]))
add(result, set1->arr[i]);
}
return result;
}
// 计算并集
Set* union(Set *set1, Set *set2) {
Set *result = malloc(sizeof(Set));
result->arr = NULL;
result->size = set1->size + set2->size;
int *union_arr = realloc(result->arr, sizeof(int) * result->size);
for (int i = 0; i < set1->size; i++)
union_arr[i] = set1->arr[i];
memcpy(union_arr + set1->size, set2->arr, set2->size * sizeof(int));
free(set1->arr); // 释放原set1内存
free(set2->arr); // 释放原set2内存
result->arr = union_arr;
result->size = set1->size + set2->size;
return result;
}
// 释放集合资源
void destroy(Set *set) {
free(set->arr);
free(set);
}
int main() {
// 示例用法
Set s1 = { .arr = {1, 2, 3, 4}, .size = 4 };
Set s2 = { .arr = {2, 4, 6}, .size = 3 };
Set *intersection_result = intersection(&s1, &s2);
Set *difference_result = difference(&s1, &s2);
Set *union_result = union(&s1, &s2);
destroy(intersection_result);
destroy(difference_result);
destroy(union_result);
return 0;
}
```
注意:这个示例代码只是一个简化的版本,实际应用中可能会更复杂,例如使用哈希表或其他数据结构来提高查找效率。同时,对于大型数据集,动态内存分配可能会导致性能问题,这时应考虑使用其他数据结构优化。另外,在main函数中,记得处理每个结果集之后的内存释放。
阅读全文