线性表的存储结构求集合A、B的并集C的C语言编程
时间: 2024-09-29 16:14:57 浏览: 53
在C语言中,我们可以使用数组或链表作为线性表的存储结构来实现集合A和B的并集C。这里我们假设集合元素是无序的,并且不会有重复项。以下是使用动态内存分配的链表结构来实现这个功能的一个简单示例:
```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));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 添加元素到链表
void addElement(Node** head, int value) {
Node* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 找出两个集合的并集
void unionSets(Node** setA, Node** setB, Node** resultHead) {
// 遍历setA并添加元素到resultHead
if (*setA != NULL) {
addElement(resultHead, (*setA)->data);
Node* tempA = *setA;
*setA = (*setA)->next;
free(tempA);
}
// 如果setB不为空,将元素添加到resultHead并更新setB指针
if (*setB != NULL) {
while (*setB != NULL) {
addElement(resultHead, (*setB)->data);
Node* tempB = *setB;
*setB = (*setB)->next;
free(tempB);
}
}
}
int main() {
Node* A_start = NULL; // 假设集合A已初始化
Node* B_start = NULL; // 假设集合B已初始化
Node* result_head = NULL; // 结果集C的头部
unionSets(&A_start, &B_start, &result_head);
// 输出并集C
Node* temp = result_head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
// 清理内存
Node* temp_to_free = result_head;
while (temp_to_free != NULL) {
Node* next_temp = temp_to_free->next;
free(temp_to_free);
temp_to_free = next_temp;
}
return 0;
}
```
在这个示例中,首先我们需要分别创建和初始化两个集合A和B的链表表示。然后通过`unionSets`函数找到并集C,最后遍历结果链表并打印出元素。
阅读全文
相关推荐


















