已知集合A和B,现要求将求C=AUB要求使用顺序表存储数据元素并输出操作结果。C语言写的简单一点
时间: 2024-09-13 10:16:32 浏览: 78
在C语言中,如果我们要使用顺序表(数组)来存储集合A和B,并计算它们的并集C=A∪B,可以按照以下步骤进行:
1. 定义两个顺序表结构体,例如`struct Node`,包含整型的数据域`data`和指向下一个节点的指针`next`。
```c
typedef struct Node {
int data;
struct Node* next;
} ListNode;
```
2. 分别创建顺序表A和B的头结点,并添加元素到列表中。
```c
ListNode* createList(int array[], int size, ListNode** head) {
*head = (ListNode*)malloc(sizeof(ListNode));
(*head)->data = array[0];
(*head)->next = NULL;
for (int i = 1; i < size; i++) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = array[i];
newNode->next = *head;
*head = newNode;
}
}
```
3. 创建一个新的顺序表C,并初始化为B的头结点,因为并集先从B开始添加。
```c
ListNode* listC = B_head;
```
4. 遍历A的每个元素,如果不在B中,则添加到C。
```c
for (ListNode* A_node = A_head; A_node != NULL; A_node = A_node->next) {
int found = 0;
for (ListNode* B_node = B_head; B_node != NULL; B_node = B_node->next) {
if (A_node->data == B_node->data) {
found = 1;
break;
}
}
if (!found) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = A_node->data;
newNode->next = NULL;
listC->next = newNode;
listC = newNode;
}
}
```
5. 最后检查A的剩余部分,如果有未加入C的元素,也添加上去。
```c
if (A_node != NULL) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = A_node->data;
newNode->next = NULL;
listC->next = newNode;
listC = newNode;
}
```
6. 输出C的顺序表内容,遍历打印即可。
```c
void printList(ListNode* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
// 调用函数
printList(listC);
```
阅读全文