-
题目要求:有序表A和B,其元素均按照从小到大升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列。
-
代码实现:
void merge(SqList A,SqList B,SqList *C) { int i=0,j=0,k=0; while(i<A.length && j<B.length) { if(A.data[i]<B.data[j]) C->data[k++]=A.data[i++]; else C->data[k++]=B.data[j++]; } while(i<A.length) C->data[k++]=A.data[i++]; while(j<B.length) C->data[k++]=B.data[j++]; C->length=k; }
-
完整程序:
#include<stdio.h> #define MAXSIZE 30 typedef struct { int data[MAXSIZE]; int length; }SqList; void merge(SqList A,SqList B,SqList *C) { int i=0,j=0,k=0; while(i<A.length && j<B.length) { if(A.data[i]<B.data[j]) C->data[k++]=A.data[i++]; else C->data[k++]=B.data[j++]; } while(i<A.length) C->data[k++]=A.data[i++]; while(j<B.length) C->data[k++]=B.data[j++]; C->length=k; } int main() { int m,n; printf("请输入线性表A的长度m:"); scanf("%d",&m); printf("请输入线性表B的长度n:"); scanf("%d",&n); SqList A,B,C; printf("请输入线性表A的数据(保证从小到大有序):"); for(int i=0;i<m;i++) scanf("%d",&A.data[i]); A.length=m; printf("请输入线性表B的数据(保证从小到大有序):"); for(int i=0;i<n;i++) scanf("%d",&B.data[i]); B.length=n; merge(A,B,&C); printf("A和B合并后的序列为:"); for(int t=0;t<C.length;t++) printf("%d ",C.data[t]); }
-
运行结果:
请输入线性表A的长度m:3 请输入线性表B的长度n:5 请输入线性表A的数据(保证从小到大有序):1 5 9 请输入线性表B的数据(保证从小到大有序):2 4 9 11 17 A和B合并后的序列为:1 2 4 5 9 9 11 17
有序表A和B,其元素均按照从小到大升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列。
于 2022-08-07 11:06:44 首次发布