1. 设计算法,实现两个顺序表集合A和B的并集操作(并集 中要去掉集合A和B中的相同元素)。 •思路: •void UnionL(SqList * La, SqList * Lb) •遍历B中的每个元素,判断当前元素是否存在A中,若不存 在,则插入到A的末尾,最后得到的集合A就是并集。用c语言写一段完整的代码
时间: 2024-02-12 08:09:54 浏览: 96
下面是一段完整的C语言代码实现:
```
typedef struct {
int *data; // 动态数组存储数据
int length; // 当前长度
int capacity; // 容量
} SqList;
// 初始化顺序表
void InitList(SqList *L, int capacity) {
L->data = (int *)malloc(sizeof(int) * capacity);
L->length = 0;
L->capacity = capacity;
}
// 在顺序表末尾插入元素
void ListInsert(SqList *L, int e) {
if (L->length == L->capacity) {
return; // 防止溢出
}
L->data[L->length] = e;
L->length++;
}
// 判断元素是否在顺序表中
int LocateElem(SqList *L, int e) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == e) {
return i; // 返回元素下标
}
}
return -1; // 表示元素不在顺序表中
}
// 顺序表集合的并集操作
void UnionL(SqList *La, SqList *Lb) {
for (int i = 0; i < Lb->length; i++) {
if (LocateElem(La, Lb->data[i]) == -1) { // 如果元素不在La中
ListInsert(La, Lb->data[i]); // 插入到La的末尾
}
}
}
int main() {
SqList La, Lb;
InitList(&La, 100);
InitList(&Lb, 100);
// 初始化集合A和B
ListInsert(&La, 1);
ListInsert(&La, 3);
ListInsert(&La, 5);
ListInsert(&Lb, 2);
ListInsert(&Lb, 3);
ListInsert(&Lb, 4);
// 集合A和B的并集
UnionL(&La, &Lb);
// 输出结果
for (int i = 0; i < La.length; i++) {
printf("%d ", La.data[i]);
}
printf("\n");
return 0;
}
```
输出结果为:1 3 5 2 4
阅读全文