用C语言实现设两个集合A、B用顺序表表示,求A-B。
时间: 2023-05-28 07:05:15 浏览: 121
需要先定义顺序表结构体,包含元素数组和当前元素个数,然后实现集合差集操作的函数。具体代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义顺序表最大长度
typedef struct {
int data[MAXSIZE]; // 元素数组
int length; // 当前元素个数
} SeqList;
void init(SeqList *list) {
list->length = 0;
}
void insert(SeqList *list, int x) {
if (list->length == MAXSIZE) {
printf("List is full!\n");
return;
}
list->data[list->length] = x;
list->length++;
}
void print(SeqList list) {
printf("[");
for (int i = 0; i < list.length; i++) {
printf("%d", list.data[i]);
if (i != list.length - 1) {
printf(", ");
}
}
printf("]\n");
}
void difference(SeqList A, SeqList B, SeqList *C) {
init(C);
for (int i = 0; i < A.length; i++) {
int flag = 1; // 标记A中当前元素是否在B中出现
for (int j = 0; j < B.length; j++) {
if (A.data[i] == B.data[j]) {
flag = 0;
break;
}
}
if (flag) {
insert(C, A.data[i]);
}
}
}
int main() {
SeqList A, B, C;
init(&A); // 初始化A集合
init(&B); // 初始化B集合
insert(&A, 1);
insert(&A, 2);
insert(&A, 3);
insert(&B, 2);
insert(&B, 4);
difference(A, B, &C); // 求A-B
printf("A: ");
print(A);
printf("B: ");
print(B);
printf("A-B: ");
print(C);
return 0;
}
```
运行结果:
```
A: [1, 2, 3]
B: [2, 4]
A-B: [1, 3]
```