实验内容 1.已知有两个按元素值递增有序的顺序表 B ,设计一个算法将表 A 和表 B 的全部元素归并一个按元素值非递减 序的顺序表 C 。 要求: 从键盘输入顺序表 A 和 B 的各元素,编程实上述算法,输出顺序表 A 、顺序表 B 和顺序表(所有元素值。
时间: 2024-05-12 17:20:00 浏览: 58
算法思路:
1. 定义三个指针:i,j,k,分别指向表A,表B,表C的起始位置。
2. 通过循环比较i和j所指向的元素大小,将较小的元素插入到表C中,同时将指针i或j向后移动一位。
3. 重复执行步骤2,直到i或j指向表A或表B的末尾。
4. 将i或j未遍历完的元素依次插入到表C中。
5. 输出表A,表B和表C的所有元素。
代码实现:
```
#include <stdio.h>
#define MAXSIZE 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[MAXSIZE], B[MAXSIZE], C[MAXSIZE * 2];
int m, n, i;
printf("请输入表A的元素个数:");
scanf("%d", &m);
printf("请输入表A的元素:");
for (i = 0; i < m; i++) {
scanf("%d", &A[i]);
}
printf("请输入表B的元素个数:");
scanf("%d", &n);
printf("请输入表B的元素:");
for (i = 0; i < n; i++) {
scanf("%d", &B[i]);
}
merge(A, B, C, m, n);
printf("表A的元素:");
for (i = 0; i < m; i++) {
printf("%d ", A[i]);
}
printf("\n");
printf("表B的元素:");
for (i = 0; i < n; i++) {
printf("%d ", B[i]);
}
printf("\n");
printf("表C的元素:");
for (i = 0; i < m + n; i++) {
printf("%d ", C[i]);
}
printf("\n");
return 0;
}
```
阅读全文