题目要求:有序表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
#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
-------------------------分割线-------------------------------
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。
用于处理CSDN的质量检测(文字不能低于10行)。