俩个有序顺序表的合并(好好学习)
今天上课的时候老师提到了这题,上课的时候脑子卡了,居然没做出来,在路上才想起来怎么操作
对于这道题首先考虑的是LA LB为空的三种情况,
1.即LA为空,LB也为空的时候,直接返回LC也就为空了,不需要任何操作
2.即LA为空,LB不为空的时候,将LA的Data全部拷贝进去,将LC->Last调为LB->Last
3.即LB为空,LA不为空的时候,将LB的Data全部拷贝进去,将LC->Last调为LC->Last
这三种是比较先考虑的,拷贝for循环就对了;(为空的判断的条件为Last=-1)
接下来就是一些比较常规的情况了;我的想法是定义三个类似指针的玩意,来定位三个顺序表的下标。即pa =pb= pc=0;然后开始循环进行比较插入,判断pa pb对应位置的数据大小,那个小就把该下标下的data值赋给LC顺序表,循环下去直到pa 大于LA->Last,或者pb 大于LB->Last,最后只要还没有插入LC中的对应LA或LB的值全部插进LC
听到这里可能还有点懵,那么我们就用图来说明以下吧
刚开始的时候:
第一次以后,pa++,pc++
第二次 pa++,pc++
第三次:pb++,pc++
第四次:pa++,pc++
到这个时候我们发现pa已经大于LA-->Last ,接下来就只需要把LB后面的全部放进去就可以了
这就是完成这道题的基本思路了,那么如何将PB中未插的数据如何全部插入呢,很简单。一个for循环,我们可以知道这个时候 pa大于 LA->last 但pb小于LB->Last;所以只要for循环到pb大于LB->Last就可以了!!!
这个时候的控制条件一定要十小心!!!
在代码的时候要判断到底是LA全部插了还是LB全部插了,可以通过
以下是代码实现:
这就是我的思路
- 点赞
- 收藏
- 关注作者
评论(0)