用c语言写一个合并两个线性表的代码并展示运行结果
时间: 2024-10-16 18:12:53 浏览: 6
在C语言中,合并两个已排序的线性表(数组或链表)通常涉及到两层循环,首先遍历第一个列表,然后将每个元素与第二个列表的元素比较,选择较小的一个添加到新列表中,直到其中一个列表遍历完。这里我给你提供一个简单的例子,假设我们有两个一维整型数组:
```c
#include <stdio.h>
// 定义结构体表示节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并函数
Node* mergeSortedArrays(int arr1[], int arr2[], int size1, int size2) {
// 创建一个新的头节点
Node* mergedList = (Node*)malloc(sizeof(Node));
mergedList->data = arr1[0];
mergedList->next = NULL;
int i = 1; // arr1的索引
int j = 0; // arr2的索引
while (i < size1 && j < size2) {
if (arr1[i] <= arr2[j]) {
// 如果arr1的当前元素更小或相等,添加到合并后的列表
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr1[i];
newNode->next = mergedList->next;
mergedList->next = newNode;
i++;
} else {
// 否则从arr2中添加元素
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr2[j];
newNode->next = mergedList->next;
mergedList->next = newNode;
j++;
}
}
// 将剩余未添加的元素(如果有的话)追加到列表尾部
while (i < size1) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr1[i];
newNode->next = mergedList->next;
mergedList->next = newNode;
i++;
}
while (j < size2) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr2[j];
newNode->next = mergedList->next;
mergedList->next = newNode;
j++;
}
return mergedList;
}
int main() {
int arr1[] = {1, 3, 5};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
int arr2[] = {2, 4, 6};
int size2 = sizeof(arr2) / sizeof(arr2[0]);
// 假设数组已排好序
Node* mergedArr = mergeSortedArrays(arr1, arr2, size1, size2);
// 打印合并后的数组
Node* temp = mergedArr;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
return 0;
}
```
当你运行这个程序,它会合并`arr1`和`arr2`并打印出结果:`1 2 3 4 5 6`。
阅读全文