C++编程将两个有序的线性表合并成一个有序的线性表
时间: 2024-05-14 09:17:19 浏览: 110
可以使用归并排序的思想来实现将两个有序的线性表合并成一个有序的线性表。
具体实现步骤:
1. 定义一个新的有序线性表,用于存储合并后的结果。
2. 定义两个指针分别指向两个有序线性表中的第一个元素。
3. 比较两个指针所指向的元素的大小,将较小的元素插入到新的有序线性表中,并将指针后移一位。
4. 重复步骤3,直到其中一个有序线性表的所有元素都插入到新的有序线性表中。
5. 将另一个有序线性表的剩余元素依次插入到新的有序线性表中。
6. 返回新的有序线性表。
以下是实现代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void initList(SqList *list) {
list->length = 0;
}
void insertList(SqList *list, int elem) {
if (list->length >= MAXSIZE) {
printf("List is full.\n");
return;
}
list->data[list->length++] = elem;
}
SqList mergeSortedList(SqList list1, SqList list2) {
SqList newList;
initList(&newList);
int i = 0, j = 0;
while (i < list1.length && j < list2.length) {
if (list1.data[i] < list2.data[j]) {
insertList(&newList, list1.data[i++]);
} else {
insertList(&newList, list2.data[j++]);
}
}
while (i < list1.length) {
insertList(&newList, list1.data[i++]);
}
while (j < list2.length) {
insertList(&newList, list2.data[j++]);
}
return newList;
}
int main() {
SqList list1, list2, newList;
initList(&list1);
initList(&list2);
insertList(&list1, 1);
insertList(&list1, 3);
insertList(&list1, 5);
insertList(&list1, 7);
insertList(&list2, 2);
insertList(&list2, 4);
insertList(&list2, 6);
insertList(&list2, 8);
newList = mergeSortedList(list1, list2);
for (int i = 0; i < newList.length; i++) {
printf("%d ", newList.data[i]);
}
printf("\n");
return 0;
}
```
输出结果:
```
1 2 3 4 5 6 7 8
```
阅读全文