已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值递增的顺序表C。 要求: 从键盘输入顺序表A和B的各元素,编程实现上述算法,输出顺序表A、顺序表B和顺序表C 的所有元素值 。禁止使用指针,使用C++语言编写
时间: 2023-06-08 08:05:08 浏览: 120
好的,我理解了你的要求。那么,下面是我的回答:
你的问题是一个经典的归并排序问题。我可以通过下面的算法实现:
```
#include <stdio.h>
#define MAX_SIZE 100
void merge(int a[], int b[], int c[], int m, int n)
{
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (a[i] < b[j])
c[k++] = a[i++];
else
c[k++] = b[j++];
}
while (i < m)
c[k++] = a[i++];
while (j <n)
c[k++] = b[j++];
}
int main()
{
int a[MAX_SIZE], b[MAX_SIZE], c[MAX_SIZE * 2];
int m, n, i;
printf("Please input the size of array A(m): ");
scanf("%d", &m);
printf("Please input the elements of array A: ");
for (i = 0; i < m; i++)
scanf("%d", &a[i]);
printf("Please input the size of array B(n): ");
scanf("%d", &n);
printf("Please input the elements of array B: ");
for (i = 0; i < n; i++)
scanf("%d", &b[i]);
merge(a, b, c, m, n);
printf("The elements of array A are: ");
for (i = 0; i < m; i++)
printf("%d ", a[i]);
printf("\nThe elements of array B are: ");
for (i = 0; i < n; i++)
printf("%d ", b[i]);
printf("\nThe elements of merged array C are: ");
for (i = 0; i < m + n; i++)
printf("%d ", c[i]);
return 0;
}
```
这个程序的思路是:先用while循环将a和b中的元素按照递增顺序归并到数组c中,然后输出三个数组的元素。至于不使用指针,是因为本题可以用数组实现。
希望能够对你有所帮助,如有疑问欢迎随时提出。
阅读全文