小白算法积累——顺序表7#有序顺序表合并

题目:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表

关键字:有序顺序表 合并

思路
关注: 已知有序顺序表A,B,将AB中元素进行处理后放入新表C
1.按顺序遍历,不断取下两个顺序表表头较小的结点存入新顺序表中,被取走元素后自动遍历,再次比较
需要变量:遍历小助手i(A),j(B),k(C)

2.如何结束?
当一表循环收入结束时,(分别对两表都进行以下操作)
a.另一表没结束,则只需循环收入剩余所有元素(必然都是最大的了)
b.另一表也结束了,则结束程序
需要变量: length作为边界

#特殊情况:
1.创建新表来装入AB两表,但是C表内存不够,gg

bool Merge(SqList A,Sqlist B,Sqlist &C){
//将有序顺序表A和B合并为一个新的顺序表C
if (A.length+B.length>C.MaxSize)//大于顺序表的最大长度
  return false;
int i=0,j=0,k=0;
while(i<A.length&&j<B.length){//循环,两两比较,小者存入结果表C
   if (A.data[i]<=B.data[i])
     c.data[k++]=A.data[i++];
  else
    C.data[k++]=B.data[j++];
  }
while(i<A.length)//当A表还有剩余元素没有收入
    c.data[k++]=A.data[i++];
while(j<B.length)//当B表还有剩余元素没有收入
    c.data[k++]=B.data[j++];
c.length=k;
return true;
}
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值