写一个C语言的线性表合并代码
时间: 2024-10-10 10:07:59 浏览: 38
在C语言中,我们可以使用指针和循环结构来合并两个无序的线性表(假设它们是动态数组)。下面是一个简单的例子,展示了如何合并两个动态数组`arr1`和`arr2`:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 功能:合并两个无序数组
void merge(int arr1[], int arr2[], int n1, int n2, int merged[]) {
Node* head = NULL; // 新线性表的头指针
Node* tail = NULL; // 当前合并点
// 遍历第一个数组,添加元素到新链表
for (int i = 0; i < n1; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr1[i];
newNode->next = NULL;
if (!head) {
head = tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
// 如果第二个数组非空,继续添加
for (int i = 0; i < n2; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr2[i];
newNode->next = NULL;
if (head == NULL) {
head = tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
}
// 示例使用
int main() {
int arr1[] = {1, 4, 5};
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int arr2[] = {2, 3, 6};
int n2 = sizeof(arr2) / sizeof(arr2[0]);
int merged[n1 + n2]; // 存储合并后的数组
merge(arr1, arr2, n1, n2, merged);
printf("Merged array is: ");
for (Node* curr = head; curr != NULL; curr = curr->next) {
printf("%d ", curr->data);
}
return 0;
}
```
在这个代码中,我们首先初始化一个空的新链表`merged`,然后遍历两个输入数组,并将元素添加到新链表的末尾。最后输出合并后的数组。
阅读全文