集合的并,交和差运算c语言
时间: 2023-07-13 09:24:56 浏览: 97
集合的并、交和差运算的算法.docx
在 C 语言中,可以使用数组来表示集合,并实现集合的并、交和差运算。以下是一个简单的实现:
```c
#include <stdio.h>
#define MAX_SIZE 100
// 定义集合类型
typedef struct {
int size;
int data[MAX_SIZE];
} Set;
// 初始化集合
void init_set(Set *s) {
s->size = 0;
}
// 添加元素到集合
void add_element(Set *s, int x) {
if (s->size == MAX_SIZE) {
fprintf(stderr, "Set overflow\n");
return;
}
for (int i = 0; i < s->size; i++) {
if (s->data[i] == x) {
return;
}
}
s->data[s->size++] = x;
}
// 从集合中删除元素
void remove_element(Set *s, int x) {
for (int i = 0; i < s->size; i++) {
if (s->data[i] == x) {
s->data[i] = s->data[--s->size];
return;
}
}
}
// 判断元素是否在集合中
int is_element(Set *s, int x) {
for (int i = 0; i < s->size; i++) {
if (s->data[i] == x) {
return 1;
}
}
return 0;
}
// 将集合 s1 和 s2 的并集保存到 s3 中
void set_union(Set *s1, Set *s2, Set *s3) {
init_set(s3);
for (int i = 0; i < s1->size; i++) {
add_element(s3, s1->data[i]);
}
for (int i = 0; i < s2->size; i++) {
add_element(s3, s2->data[i]);
}
}
// 将集合 s1 和 s2 的交集保存到 s3 中
void set_intersect(Set *s1, Set *s2, Set *s3) {
init_set(s3);
for (int i = 0; i < s1->size; i++) {
if (is_element(s2, s1->data[i])) {
add_element(s3, s1->data[i]);
}
}
}
// 将集合 s1 和 s2 的差集(s1 - s2)保存到 s3 中
void set_difference(Set *s1, Set *s2, Set *s3) {
init_set(s3);
for (int i = 0; i < s1->size; i++) {
if (!is_element(s2, s1->data[i])) {
add_element(s3, s1->data[i]);
}
}
}
int main() {
Set s1, s2, s3;
init_set(&s1);
init_set(&s2);
init_set(&s3);
add_element(&s1, 1);
add_element(&s1, 2);
add_element(&s1, 3);
add_element(&s1, 4);
add_element(&s2, 3);
add_element(&s2, 4);
add_element(&s2, 5);
add_element(&s2, 6);
set_union(&s1, &s2, &s3);
printf("Union: ");
for (int i = 0; i < s3.size; i++) {
printf("%d ", s3.data[i]);
}
printf("\n");
set_intersect(&s1, &s2, &s3);
printf("Intersect: ");
for (int i = 0; i < s3.size; i++) {
printf("%d ", s3.data[i]);
}
printf("\n");
set_difference(&s1, &s2, &s3);
printf("Difference: ");
for (int i = 0; i < s3.size; i++) {
printf("%d ", s3.data[i]);
}
printf("\n");
return 0;
}
```
在本例中,我们定义了一个 Set 类型,它包含一个整数数组和一个整数表示数组的大小。我们使用 add_element、remove_element 和 is_element 函数来操作集合中的元素。set_union、set_intersect 和 set_difference 函数分别实现了集合的并、交和差运算。这些函数将结果保存在一个新的集合中,并通过指针参数返回该集合。在本例中,我们创建了两个集合 s1 和 s2,并对其进行了一些操作,然后输出了它们的并集、交集和差集。该程序的输出如下:
```
Union: 1 2 3 4 5 6
Intersect: 3 4
Difference: 1 2
```
因此,集合 s1 和 s2 的并集为 {1, 2, 3, 4, 5, 6},交集为 {3, 4},差集为 {1, 2}。
阅读全文