利用两个线性表La和Lb分别表示两个集合A和B,现要求一个新的集合A=A∪B,写出c语言代码
时间: 2024-10-10 08:02:26 浏览: 56
两个非递减存储顺序线性表归并为非递减顺序线性表
在C语言中,你可以通过遍历两个集合(La和Lb),将每个元素添加到新的集合A中来实现并集操作。这里假设La和Lb都是动态数组或链表,并且它们各自存储了整数类型的元素。以下是简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 合并两个链表
void mergeLists(Node** headRef, Node** otherHeadRef) {
Node* mergedList = NULL; // 新链表头指针
Node* current1 = *headRef; // 遍历第一个列表
Node* current2 = *otherHeadRef; // 遍历第二个列表
while (current1 != NULL && current2 != NULL) { // 只有当两个链表都有元素时
if (current1->data <= current2->data) { // 如果第一个数据小或相等
if (mergedList == NULL) { // 如果新链表为空
mergedList = current1;
} else {
mergedList->next = current1;
}
current1 = current1->next; // 移动到下一个
} else { // 如果第二个数据小
if (mergedList == NULL) { // 如果新链表为空
mergedList = current2;
} else {
mergedList->next = current2;
}
current2 = current2->next;
}
}
// 添加剩余未处理的元素
if (current1 != NULL) {
mergedList->next = current1;
} else {
mergedList->next = current2;
}
}
// 输出链表元素
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Node* La = NULL; // 初始化La
Node* Lb = NULL; // 初始化Lb
// 填充La和Lb的实际内容...
// 创建新集合A
Node* A_head = NULL;
mergeLists(&A_head, &La); // 将La合并到A
mergeLists(&A_head, &Lb); // 再次合并Lb以覆盖La中可能存在的重复元素
// 打印结果
printList(A_head);
return 0;
}
```
这个代码首先初始化了两个链表La和Lb,然后通过`mergeLists`函数合并它们创建新的集合A。注意,你需要在主函数中填充La和Lb的具体元素。
阅读全文