.将两个递增的有序顺序表合并为一个递增的有序顺序表使用C语言编写
时间: 2023-05-24 15:01:39 浏览: 138
可以使用双指针法,从两个有序列表的开头开始比较大小,将较小的值加入到新的有序列表中,直至其中一个列表被遍历完成,再将另一个列表的剩余部分加入到新列表中即可。以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
void merge(int arr1[], int len1, int arr2[], int len2, int result[]) {
int i = 0, j = 0, k = 0;
while (i < len1 && j < len2) {
if (arr1[i] <= arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}
while (i < len1) {
result[k++] = arr1[i++];
}
while (j < len2) {
result[k++] = arr2[j++];
}
}
int main() {
int arr1[MAX_SIZE], arr2[MAX_SIZE], result[MAX_SIZE];
int len1, len2, len;
// 获取两个有序列表
printf("请输入有序列表1的元素(以-1结束):\n");
len1 = 0;
while (1) {
int num;
scanf("%d", &num);
if (num == -1) {
break;
}
arr1[len1++] = num;
}
printf("请输入有序列表2的元素(以-1结束):\n");
len2 = 0;
while (1) {
int num;
scanf("%d", &num);
if (num == -1) {
break;
}
arr2[len2++] = num;
}
// 合并两个有序列表
merge(arr1, len1, arr2, len2, result);
len = len1 + len2;
printf("合并后的有序列表为:\n");
for (int i = 0; i < len; i++) {
printf("%d ", result[i]);
}
printf("\n");
return 0;
}
```
输入样例:
```
请输入有序列表1的元素(以-1结束):
1 3 4 7 -1
请输入有序列表2的元素(以-1结束):
2 5 6 8 9 10 -1
```
输出样例:
```
合并后的有序列表为:
1 2 3 4 5 6 7 8 9 10
```