//两有序顺序表合并为新的有序顺序表
#include<stdio.h>
#define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}Sqlist;
bool Merge(Sqlist A,Sqlist B,Sqlist &C){
if(A.length+B.length>MaxSize)
return false;
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;//最后已经k++了就不用+1了
return true;
}
void PrintList(Sqlist L){
for(int i=0;i<L.length;i++)
printf("%d ",L.data[i]);
}
int main(){
Sqlist A,B,C;
A.data[0]=1;
A.data[1]=3;
A.length=2;
B.data[0]=2;
B.data[1]=4;
B.length=2;
Merge(A,B,C);
PrintList(C);
}
运行结果:
1 2 3 4