C语言实现集合的各种运算
时间: 2023-09-26 08:13:57 浏览: 227
C语言可以通过结构体和指针来实现集合的各种运算。以下是常见的集合运算及其实现方法:
1. 求并集
并集即将两个集合中所有元素合并成一个集合,去除重复元素。实现方法如下:
```c
#include <stdio.h>
#define MAXSIZE 100
// 定义集合结构体
typedef struct {
int data[MAXSIZE];
int length;
}Set;
// 求并集函数
void Union(Set *A, Set *B, Set *C) {
int i, j;
// 将A集合的元素全部复制到C集合中
for (i = 0; i < A->length; i++) {
C->data[i] = A->data[i];
}
C->length = A->length;
// 遍历B集合,如果B集合中元素不在C集合中,则将其加入C集合
for (i = 0; i < B->length; i++) {
for (j = 0; j < C->length; j++) {
if (B->data[i] == C->data[j]) {
break;
}
}
if (j == C->length) {
C->data[C->length] = B->data[i];
C->length++;
}
}
}
int main() {
// 初始化集合A和B
Set A = {{1, 2, 3}, 3};
Set B = {{2, 3, 4}, 3};
// 定义集合C
Set C;
Union(&A, &B, &C);
// 遍历并集C
for (int i = 0; i < C.length; i++) {
printf("%d ", C.data[i]);
}
return 0;
}
```
2. 求交集
交集即将两个集合中都存在的元素合并成一个集合。实现方法如下:
```c
#include <stdio.h>
#define MAXSIZE 100
// 定义集合结构体
typedef struct {
int data[MAXSIZE];
int length;
}Set;
// 求交集函数
void Intersection(Set *A, Set *B, Set *C) {
int i, j;
C->length = 0;
// 遍历A集合,如果A集合中元素也在B集合中,则将其加入C集合
for (i = 0; i < A->length; i++) {
for (j = 0; j < B->length; j++) {
if (A->data[i] == B->data[j]) {
C->data[C->length] = A->data[i];
C->length++;
break;
}
}
}
}
int main() {
// 初始化集合A和B
Set A = {{1, 2, 3}, 3};
Set B = {{2, 3, 4}, 3};
// 定义集合C
Set C;
Intersection(&A, &B, &C);
// 遍历交集C
for (int i = 0; i < C.length; i++) {
printf("%d ", C.data[i]);
}
return 0;
}
```
3. 求差集
差集即将一个集合中存在,而另一个集合中不存在的元素合并成一个集合。实现方法如下:
```c
#include <stdio.h>
#define MAXSIZE 100
// 定义集合结构体
typedef struct {
int data[MAXSIZE];
int length;
}Set;
// 求差集函数
void Difference(Set *A, Set *B, Set *C) {
int i, j;
C->length = 0;
// 遍历A集合,如果A集合中元素不在B集合中,则将其加入C集合
for (i = 0; i < A->length; i++) {
for (j = 0; j < B->length; j++) {
if (A->data[i] == B->data[j]) {
break;
}
}
if (j == B->length) {
C->data[C->length] = A->data[i];
C->length++;
}
}
}
int main() {
// 初始化集合A和B
Set A = {{1, 2, 3}, 3};
Set B = {{2, 3, 4}, 3};
// 定义集合C
Set C;
Difference(&A, &B, &C);
// 遍历差集C
for (int i = 0; i < C.length; i++) {
printf("%d ", C.data[i]);
}
return 0;
}
```
4. 求补集
补集即将一个集合中不存在于另一个集合中的元素合并成一个集合。实现方法如下:
```c
#include <stdio.h>
#define MAXSIZE 100
// 定义集合结构体
typedef struct {
int data[MAXSIZE];
int length;
}Set;
// 求补集函数
void Complement(Set *A, Set *B, Set *C) {
int i, j;
C->length = 0;
// 遍历B集合,如果B集合中元素不在A集合中,则将其加入C集合
for (i = 0; i < B->length; i++) {
for (j = 0; j < A->length; j++) {
if (B->data[i] == A->data[j]) {
break;
}
}
if (j == A->length) {
C->data[C->length] = B->data[i];
C->length++;
}
}
}
int main() {
// 初始化集合A和B
Set A = {{1, 2, 3}, 3};
Set B = {{2, 3, 4}, 3};
// 定义集合C
Set C;
Complement(&A, &B, &C);
// 遍历补集C
for (int i = 0; i < C.length; i++) {
printf("%d ", C.data[i]);
}
return 0;
}
```
阅读全文