C语言:设两个集合A、B用顺序表表示,求A-B,第一行输入两个整数N、M(大于0小于100),分别表示两个集合的长度; 第二行输入第一个集合的N个元素; 第三行输入第二个集合的M个元素;输出第一个集合和第二个集合的差集。(若差集为空集,则输出*)用顺序表表示集合
时间: 2023-05-28 17:05:26 浏览: 122
顺序表表示集合,实现集合的交、并、差运算
3星 · 编辑精心推荐
#include <stdio.h>
#define MAXSIZE 100 // 定义最大长度
typedef struct { // 定义集合结构体
int data[MAXSIZE];
int length;
} Set;
void initSet(Set *s) { // 初始化集合
s->length = 0;
}
void insert(Set *s, int x) { // 插入元素
int i;
for (i = 0; i < s->length; i++) {
if (s->data[i] == x) { // 集合中已有该元素
return;
}
}
s->data[s->length++] = x;
}
void difference(Set *a, Set *b, Set *c) { // 求差集
int i, j;
initSet(c);
for (i = 0; i < a->length; i++) {
int flag = 1;
for (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() {
Set a, b, c;
int n, m, i, x;
scanf("%d%d", &n, &m);
initSet(&a);
initSet(&b);
for (i = 0; i < n; i++) {
scanf("%d", &x);
insert(&a, x);
}
for (i = 0; i < m; i++) {
scanf("%d", &x);
insert(&b, x);
}
difference(&a, &b, &c);
if (c.length == 0) {
printf("*\n");
} else {
for (i = 0; i < c.length; i++) {
printf("%d ", c.data[i]);
}
printf("\n");
}
return 0;
}
阅读全文