c语言代码用顺序表求两集合差集
时间: 2024-05-29 20:03:42 浏览: 117
下面是一个用顺序表实现求两个集合差集的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
// 定义顺序表结构体
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
// 初始化顺序表
void init(SqList *list) {
list->length = 0;
}
// 插入元素
void insert(SqList *list, int element) {
if (list->length >= MAXSIZE) {
printf("Error: List is full.\n");
exit(1);
}
list->data[list->length++] = element;
}
// 输出集合
void printSet(SqList *list) {
printf("{ ");
for (int i = 0; i < list->length; i++) {
printf("%d ", list->data[i]);
}
printf("}\n");
}
// 求两个集合的差集
void differenceSet(SqList *setA, SqList *setB, SqList *result) {
init(result);
for (int i = 0; i < setA->length; i++) {
int flag = 1;
for (int j = 0; j < setB->length; j++) {
if (setA->data[i] == setB->data[j]) {
flag = 0;
break;
}
}
if (flag) {
insert(result, setA->data[i]);
}
}
}
int main() {
SqList setA, setB, result;
init(&setA);
init(&setB);
init(&result);
// 为集合A插入元素
insert(&setA, 1);
insert(&setA, 3);
insert(&setA, 5);
insert(&setA, 7);
insert(&setA, 9);
// 为集合B插入元素
insert(&setB, 2);
insert(&setB, 4);
insert(&setB, 6);
insert(&setB, 8);
insert(&setB, 10);
printf("Set A: ");
printSet(&setA);
printf("Set B: ");
printSet(&setB);
differenceSet(&setA, &setB, &result);
printf("Set A - B: ");
printSet(&result);
return 0;
}
```
在上面的代码中,我们定义了一个 `SqList` 结构体,表示顺序表。通过 `init()` 函数可以初始化顺序表,通过 `insert()` 函数可以向顺序表中插入元素。`printSet()` 函数用于输出集合。
`differenceSet()` 函数实现了求两个集合的差集。它遍历集合A中的每个元素,判断它是否在集合B中出现过,如果没有出现过,则将它加入到结果集合中。
在主函数中,我们创建了两个集合A和B,并向它们中插入一些元素。然后调用 `differenceSet()` 函数求出它们的差集,并输出结果。
输出结果如下:
```
Set A: { 1 3 5 7 9 }
Set B: { 2 4 6 8 10 }
Set A - B: { 1 3 5 7 9 }
```
可以看到,集合A中的所有元素都在结果集合中出现了,因为它们都不在集合B中。
阅读全文