c将线性表看成是集合,写一个函数求两个集合的并集 要求: (1)线性表可能有重复的元素,要对线性表去除重复的元素(可以调用去重函数)。 (2)写主函数调用该函数,进行正确性测试
时间: 2024-09-26 22:02:40 浏览: 31
在C语言中,我们可以创建一个结构体表示线性表,并编写一个函数来合并两个线性表(即求并集)。首先,我们需要定义一个结构体,例如`ListNode`,表示列表节点,然后实现去重功能。这里我们假设已经有一个简单的去重函数`removeDuplicates`。接下来,我们编写函数`unionLists`来合并两个已排序的线性表。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义线性表节点结构
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode;
// 去除重复元素的辅助函数
ListNode* removeDuplicates(ListNode* head) {
if (head == NULL || head->next == NULL)
return head;
ListNode* temp = head;
while (temp->next != NULL) {
if (temp->data == temp->next->data)
temp->next = temp->next->next;
else
temp = temp->next;
}
return head;
}
// 合并两个有序线性表
ListNode* unionLists(ListNode* list1, ListNode* list2) {
if (list1 == NULL)
return list2;
if (list2 == NULL)
return list1;
// 如果list1的值小于list2的值,保持list1不变
if (list1->data < list2->data)
list1->next = unionLists(list1->next, list2);
// 否则,将list2添加到list1的后面
else
list1->next = removeDuplicates(unionLists(NULL, list2));
return removeDuplicates(list1); // 最后再去除一次可能的新加入的重复项
}
// 主函数测试
void mainUnion() {
// 创建两个示例线性表
ListNode* list1 = createList({1, 2, 3, 4}); // 假设createList是一个能生成有序列表的函数
ListNode* list2 = createList({3, 4, 5, 6});
// 合并两个线性表
ListNode* result = unionLists(list1, list2);
// 打印结果
printList(result); // 假设printList是一个能打印链表的函数
// 清理内存
destroyList(result); // 假设destroyList是一个释放链表内存的函数
}
阅读全文