俩个有序顺序表的合并(好好学习)
【摘要】 Elementype GetElem(list L, Position pos){ if (pos<0 || pos>L->last) { return ERROR; } else { return L->Data[pos]; }}//给出LA LB俩个递增顺序表,要求合并成为LC有序链表(LC为空)struct LNode { Elementype Data[Maxszie]; P...
今天上课的时候老师提到了这题,上课的时候脑子卡了,居然没做出来,在路上才想起来怎么操作
对于这道题首先考虑的是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全部插了,可以通过
以下是代码实现:
这就是我的思路
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)