#include <stdio.h>
using namespace std;
#define Max 50
struct SqlList{
int data[Max];
int length;
};
bool merge(SqlList &s,SqlList &a,SqlList &b){
if(a.length+b.length>s.length){
return false;
}
int i=0,j=0,k=0;
while(i<a.length&&j<b.length){
if(a.data[i]<=b.data[j]){
s.data[k]=a.data[i];
i++;
k++;
}else{
s.data[k]=b.data[j];
j++;
k++;
}
}
printf("i=%d\n",i);
printf("j=%d\n",j);
if(i==a.length){
//把剩余的线性表的数利用一个for循环放入s表
//这里的i和j是和两个线性表的长度进行比较的
//因为通过我们输出i和j的输出来看分别为5和4
//因为我们最后执行的循环中i和j都有++一次
//实际上j已经指向了最后一个数
//所以直接判断j<b.length就行
for(j;j<b.length;j++){
s.data[k]=b.data[j];
k++;
}
}
if(j==b.length){
for(i;i<a.length;i++){
s.data[k]=a.data[i];
k++;
}
}
s.length=a.length+b.length;
}
int main(){
SqlList s={{},10};
SqlList a={{1,3,5,7,9},5};
SqlList b={{2,4,6,8,10},5};
printf("当前线性表分别为:\n");
for(int i=0;i<a.length;i++){
printf("%d ",a.data[i]);
}
printf("\n");
for(int i=0;i<a.length;i++){
printf("%d ",b.data[i]);
}
printf("\n");
merge(s,a,b);
printf("合并之后:\n");
for(int k=0;k<s.length;k++){
printf("%d ",s.data[k]);
}
}