帮我写一段由C语言而非C++构成的代码,要求如下描述一个集合的抽象数据类型 Set,其中所有元素为正整数,集合的基本运算包括:(1)由整数数组 a[0..n-1]创建一个集合。(2)输出一个集合的所有元素。(3)判断一个元素是否在一个集合中。(4)求两个集合的并集。(5)求两个集合的差集。(6)求两个集合的交集。在此基础上设计集合的顺序存储结构,并实现各基本运算的算法。
时间: 2023-03-26 16:03:45 浏览: 150
以下是由C语言构成的代码,实现了集合的抽象数据类型 Set:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct Set {
int data[MAX_SIZE];
int size;
} Set;
// 创建一个集合
void createSet(Set *set, int *arr, int n) {
set->size = ;
for (int i = ; i < n; i++) {
int flag = ;
for (int j = ; j < set->size; j++) {
if (arr[i] == set->data[j]) {
flag = 1;
break;
}
}
if (!flag) {
set->data[set->size++] = arr[i];
}
}
}
// 输出一个集合的所有元素
void printSet(Set *set) {
printf("{ ");
for (int i = ; i < set->size; i++) {
printf("%d ", set->data[i]);
}
printf("}\n");
}
// 判断一个元素是否在一个集合中
int isInSet(Set *set, int x) {
for (int i = ; i < set->size; i++) {
if (set->data[i] == x) {
return 1;
}
}
return ;
}
// 求两个集合的并集
void unionSet(Set *set1, Set *set2, Set *result) {
result->size = ;
for (int i = ; i < set1->size; i++) {
result->data[result->size++] = set1->data[i];
}
for (int i = ; i < set2->size; i++) {
if (!isInSet(set1, set2->data[i])) {
result->data[result->size++] = set2->data[i];
}
}
}
// 求两个集合的差集
void differenceSet(Set *set1, Set *set2, Set *result) {
result->size = ;
for (int i = ; i < set1->size; i++) {
if (!isInSet(set2, set1->data[i])) {
result->data[result->size++] = set1->data[i];
}
}
}
// 求两个集合的交集
void intersectionSet(Set *set1, Set *set2, Set *result) {
result->size = ;
for (int i = ; i < set1->size; i++) {
if (isInSet(set2, set1->data[i])) {
result->data[result->size++] = set1->data[i];
}
}
}
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {4, 5, 6, 7, 8};
Set set1, set2, result;
createSet(&set1, arr1, 5);
createSet(&set2, arr2, 5);
printf("set1: ");
printSet(&set1);
printf("set2: ");
printSet(&set2);
unionSet(&set1, &set2, &result);
printf("set1 ∪ set2: ");
printSet(&result);
differenceSet(&set1, &set2, &result);
printf("set1 - set2: ");
printSet(&result);
intersectionSet(&set1, &set2, &result);
printf("set1 ∩ set2: ");
printSet(&result);
return ;
}
```
阅读全文