假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。编写一个算法求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。假设集合用顺序表存储,集合中的元素为正整数。第1行输入两个集合 A 和 B的元素个数;第2行输入集合A的各数据元素;第3行输入集合B的各数据元素。输出集合A和B的并集C的各元素。
时间: 2023-05-29 14:06:13 浏览: 132
算法思路:
1. 创建一个新的线性表 LC,用于存储 A 和 B 的并集。
2. 依次将 A 和 B 中的元素添加到 LC 中,如果元素已经存在,则不重复添加。
3. 输出 LC 中的所有元素。
算法实现:
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void InitList(SqList *L) {
L->length = 0;
}
int LocateElem(SqList L, int e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i;
}
}
return -1;
}
void ListInsert(SqList *L, int e) {
if (LocateElem(*L, e) == -1) { // 如果元素不存在,则插入到表尾
L->data[L->length] = e;
L->length++;
}
}
void Union(SqList A, SqList B, SqList *C) {
InitList(C);
for (int i = 0; i < A.length; i++) {
ListInsert(C, A.data[i]);
}
for (int i = 0; i < B.length; i++) {
ListInsert(C, B.data[i]);
}
}
int main() {
SqList A, B, C;
int m, n;
scanf("%d %d", &m, &n);
for (int i = 0; i < m; i++) {
scanf("%d", &A.data[i]);
A.length++;
}
for (int i = 0; i < n; i++) {
scanf("%d", &B.data[i]);
B.length++;
}
Union(A, B, &C);
for (int i = 0; i < C.length; i++) {
printf("%d ", C.data[i]);
}
printf("\n");
return 0;
}