C语言实现集合运算代码
时间: 2023-10-26 21:47:53 浏览: 318
下面是一个简单的C语言代码示例,演示了集合的并、交、差等基本运算:
```c
#include <stdio.h>
// 定义集合的最大容量
#define MAX_SIZE 100
// 定义集合结构体
typedef struct {
int elements[MAX_SIZE];
int size;
} Set;
// 初始化集合
void initializeSet(Set* set) {
set->size = 0;
}
// 添加元素到集合
void addElement(Set* set, int element) {
if (set->size < MAX_SIZE) {
set->elements[set->size] = element;
set->size++;
}
}
// 打印集合元素
void printSet(Set set) {
printf("{ ");
for (int i = 0; i < set.size; i++) {
printf("%d ", set.elements[i]);
}
printf("}\n");
}
// 求两个集合的并集
Set unionSet(Set set1, Set set2) {
Set resultSet;
initializeSet(&resultSet);
// 将set1的元素添加到resultSet
for (int i = 0; i < set1.size; i++) {
addElement(&resultSet, set1.elements[i]);
}
// 将set2中不重复的元素添加到resultSet
for (int i = 0; i < set2.size; i++) {
int element = set2.elements[i];
bool alreadyExists = false;
// 检查element是否已经存在于resultSet中
for (int j = 0; j < resultSet.size; j++) {
if (resultSet.elements[j] == element) {
alreadyExists = true;
break;
}
}
// 如果element不存在于resultSet中,则添加到resultSet
if (!alreadyExists) {
addElement(&resultSet, element);
}
}
return resultSet;
}
// 求两个集合的交集
Set intersectSet(Set set1, Set set2) {
Set resultSet;
initializeSet(&resultSet);
// 遍历set1中的元素,如果存在于set2中,则添加到resultSet
for (int i = 0; i < set1.size; i++) {
int element = set1.elements[i];
for (int j = 0; j < set2.size; j++) {
if (set2.elements[j] == element) {
addElement(&resultSet, element);
break;
}
}
}
return resultSet;
}
// 求两个集合的差集
Set differenceSet(Set set1, Set set2) {
Set resultSet;
initializeSet(&resultSet);
// 遍历set1中的元素,如果不存在于set2中,则添加到resultSet
for (int i = 0; i < set1.size; i++) {
int element = set1.elements[i];
bool existsInSet2 = false;
// 检查element是否存在于set2中
for (int j = 0; j < set2.size; j++) {
if (set2.elements[j] == element) {
existsInSet2 = true;
break;
}
}
// 如果element不存在于set2中,则添加到resultSet
if (!existsInSet2) {
addElement(&resultSet, element);
}
}
return resultSet;
}
int main() {
// 初始化集合 set1 = {1, 2, 3}
Set set1;
initializeSet(&set1);
addElement(&set1, 1);
addElement(&set1, 2);
addElement(&set1, 3);
// 初始化集合 set2 = {2, 3, 4}
Set set2;
initializeSet(&set2);
addElement(&set2, 2);
addElement(&set2, 3);
addElement(&set2, 4);
// 计算并集
Set unionResult = unionSet(set1, set2);
printf("Union: ");
printSet(unionResult);
// 计算交集
Set intersectResult = intersectSet(set1, set2);
printf("Intersection: ");
printSet(intersectResult);
// 计算差集
Set differenceResult = differenceSet(set1, set2);
printf("Difference: ");
printSet(differenceResult);
return 0;
}
```
在上面的代码示例中,我们定义了一个`Set`结构体来表示一个集合,包含了一个整型数组`elements`和集合的大小`size`。通过函数来实现集合的初始化、元素的添加、集合的打印,以及并、交、差等基本运算。
在`main`函数中,我们创建了两个集合`set1`和`set2`,并调用相应的函数来进行并、交、差等运算,并将结果打印出来。
你可以根据自己的需求,修改和扩展这段代码来实现更复杂的集合运算。
阅读全文