c语言数据结构线性表合并
时间: 2024-10-15 08:05:27 浏览: 38
在C语言中,合并两个线性表(如数组或链表)通常指的是将这两个列表的内容连接在一起形成一个新的列表。这里有两个常见情况:
1. 合并已排序的数组:如果两数组已分别排好序,可以采用双指针法,从头开始遍历每个数组,将较小的元素放入新数组,并移动对应指针,直到遍历完其中一个。
```c
void merge_sorted_arrays(int arr1[], int arr2[], int n1, int n2, int merged[]) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (arr1[i] <= arr2[j]) {
merged[k++] = arr1[i++];
} else {
merged[k++] = arr2[j++];
}
}
// 将剩余未添加到merged的元素复制过去
while (i < n1) {
merged[k++] = arr1[i++];
}
while (j < n2) {
merged[k++] = arr2[j++];
}
}
```
2. 链表的合并:对于链表,可以创建一个新的头节点,然后依次比较两个链表的节点值,将较小的节点添加到新链表,直至遍历完整个链表。
```c
typedef struct Node {
int data;
struct Node *next;
} Node;
Node* mergeLinkedList(Node* list1, Node* list2) {
if (!list1) return list2;
if (!list2) return list1;
if (list1->data <= list2->data) {
list1->next = mergeLinkedList(list1->next, list2);
return list1;
} else {
list2->next = mergeLinkedList(list1, list2->next);
return list2;
}
}
```
阅读全文