描述一个集合的抽象数据类型 Set,其中所有元素为正整数,集合的基本运算包括: (1)由整数数组 a[0..n-1]创建一个集合。 (2)输出一个集合的所有元素。 (3)判断一个元素是否在一个集合中。 (4)求两个集合的并集。 (5)求两个集合的差集。 (6)求两个集合的交集。 在此基础上设计集合的顺序存储结构,并实现各基本运算的算法。 注意: 1. 函数的参数(传值、传地址) 2. 函数的返回值(有返回值,无返回值 void) 3. 确定处理的数据元素属性,构造数据类型 4. 自己写.h 头文件(构造数据类型,设计相关运算)(.h 也可以在其他位置引用) 5. 低级错误:= or == , a=b 还是 b=a,中文符号 or 英文符号…… 6. 函数的功能尽可能独立,降低函数之间的耦合度 7. 不要写重复的代码(代码冗余)
时间: 2023-03-26 13:03:23 浏览: 472
Set 是一个抽象数据类型,其中所有元素为正整数。集合的基本运算包括:
(1)由整数数组 a[..n-1] 创建一个集合。
(2)输出一个集合的所有元素。
(3)判断一个元素是否在一个集合中。
(4)求两个集合的并集。
(5)求两个集合的差集。
(6)求两个集合的交集。
为了实现这些基本运算,我们可以设计一个顺序存储结构。具体实现如下:
1. 定义一个结构体 Set,其中包含一个整型数组 data 和一个整型变量 size,分别表示集合中的元素和元素个数。
2. 定义一个函数 createSet,用于创建一个集合。该函数的参数为一个整型数组 a 和数组长度 n,返回一个 Set 结构体。
3. 定义一个函数 printSet,用于输出一个集合的所有元素。该函数的参数为一个 Set 结构体,无返回值。
4. 定义一个函数 isElementInSet,用于判断一个元素是否在一个集合中。该函数的参数为一个 Set 结构体和一个整型变量 x,返回一个布尔值。
5. 定义一个函数 unionSet,用于求两个集合的并集。该函数的参数为两个 Set 结构体,返回一个 Set 结构体。
6. 定义一个函数 differenceSet,用于求两个集合的差集。该函数的参数为两个 Set 结构体,返回一个 Set 结构体。
7. 定义一个函数 intersectionSet,用于求两个集合的交集。该函数的参数为两个 Set 结构体,返回一个 Set 结构体。
具体实现细节请见代码:
// Set.h
#ifndef SET_H
#define SET_H
typedef struct Set {
int data[100];
int size;
} Set;
Set createSet(int a[], int n);
void printSet(Set s);
int isElementInSet(Set s, int x);
Set unionSet(Set s1, Set s2);
Set differenceSet(Set s1, Set s2);
Set intersectionSet(Set s1, Set s2);
#endif
// Set.c
#include "Set.h"
#include <stdio.h>
Set createSet(int a[], int n) {
Set s;
s.size = ;
for (int i = ; i < n; i++) {
int j;
for (j = ; j < s.size; j++) {
if (s.data[j] == a[i]) {
break;
}
}
if (j == s.size) {
s.data[s.size++] = a[i];
}
}
return s;
}
void printSet(Set s) {
printf("{ ");
for (int i = ; i < s.size; i++) {
printf("%d ", s.data[i]);
}
printf("}\n");
}
int isElementInSet(Set s, int x) {
for (int i = ; i < s.size; i++) {
if (s.data[i] == x) {
return 1;
}
}
return ;
}
Set unionSet(Set s1, Set s2) {
Set s;
s.size = ;
for (int i = ; i < s1.size; i++) {
s.data[s.size++] = s1.data[i];
}
for (int i = ; i < s2.size; i++) {
if (!isElementInSet(s1, s2.data[i])) {
s.data[s.size++] = s2.data[i];
}
}
return s;
}
Set differenceSet(Set s1, Set s2) {
Set s;
s.size = ;
for (int i = ; i < s1.size; i++) {
if (!isElementInSet(s2, s1.data[i])) {
s.data[s.size++] = s1.data[i];
}
}
return s;
}
Set intersectionSet(Set s1, Set s2) {
Set s;
s.size = ;
for (int i = ; i < s1.size; i++) {
if (isElementInSet(s2, s1.data[i])) {
s.data[s.size++] = s1.data[i];
}
}
return s;
}
在使用时,可以按照以下方式调用函数:
int a[] = {1, 2, 3, 4, 5};
Set s1 = createSet(a, 5);
printSet(s1); // 输出 { 1 2 3 4 5 }
Set s2 = createSet(a + 2, 3);
printSet(s2); // 输出 { 3 4 5 }
printf("%d\n", isElementInSet(s1, 3)); // 输出 1
printf("%d\n", isElementInSet(s1, 6)); // 输出
Set s3 = unionSet(s1, s2);
printSet(s3); // 输出 { 1 2 3 4 5 }
Set s4 = differenceSet(s1, s2);
printSet(s4); // 输出 { 1 2 }
Set s5 = intersectionSet(s1, s2);
printSet(s5); // 输出 { 3 4 5 }
阅读全文