数据结构


⚡️数据结构-第一章
⚡️抽象数据类型案例
⚡️数据结构-第二章(1)-线性结构
⚡️数据结构-第二章(2)-线性表的顺序表示和实现
⚡️数据结构-第二章(3)-顺序表(含代码)
⚡️数据结构-第二章(4)-顺序表案例(含代码)
⚡️数据结构-第二章(5)-链式存储结构
⚡️数据结构-第二章(6)-单链表基本操作的实现
⚡️数据结构-第二章(7)-双向链表和循环链表

数据结构-第二章(8)-线性表的应用(线性表合并)

一、线性表的合并

问题描述:

  假设利用两个线性表La和Lb分别表示两个集合 A , B A,B A,B,现要求一个新的集合 A = A ∪ B A=A∪B A=AB

L a = ( 7 , 5 , 3 , 11 ) La=(7,5,3,11) La=(7,5,3,11) L b = ( 2 , 6 , 3 ) − > L a = ( 7 , 5 , 3 , 11 , 2 , 6 ) Lb=(2,6,3)->La=(7,5,3,11,2,6) Lb=(2,6,3)>La=(7,5,3,11,2,6)

在这里插入图片描述
算法步骤

依次取出 L b Lb Lb中的每个元素,执行以下操作:”

  • ① 在 L a La La中查找该元素

  • ② 如果找不到,则将其插入 L a La La的最后

在这里插入图片描述

  此算法复杂度是两线性表表长的乘积

  这里的算法是通用的与 L a 、 L b La、Lb LaLb的具体存储方式无关(不关心它们是用顺序表还是链表)

二、有序表的合并

  问题描述:已知线性表 L a La La L b Lb Lb中的数据元素按值非递减有序排列,现要求将 L a La La L b Lb Lb归并为一个新的线性表 L c Lc Lc L c Lc Lc中的数据元素按值非递减有序排列(不一定是严格递增的可能出现相等的元素)。

L a = ( 1 , 7 , 8 ) , L b = ( 2 , 4 , 6 , 8 , 10 , 11 ) − > L c = ( 1 , 2 , 4 , 6 , 7 , 8 , 8 , 10 , 11 ) La=(1,7,8),Lb=(2,4,6,8,10,11)->Lc=(1,2,4,6,7,8,8,10,11) La=(1,7,8)Lb=(2,4,6,8,10,11)>Lc=(1,2,4,6,7,8,8,10,11)
在这里插入图片描述

顺序表实现

算法步骤:

  • ① 创建一个空表 L c Lc Lc

  • ② 依次从 L a La La L b Lb Lb中“摘取”元素值较小的结点插入到 L c Lc Lc表的最后,直至其中一个表为空。

  • ③ 继续将 L a La La L b Lb Lb其中一个表的剩余结点插入在 L c Lc Lc表的最后。
    在这里插入图片描述
    算法主要思想

循环比较将小的值放入 L c Lc Lc并移动小的元素所在数组的指针和 L c Lc Lc指针。
在这里插入图片描述
在这里插入图片描述

链表实现

有序表链表的实现具体可以看我之前的一篇文章有序表(链表)的合并(结合力扣21题/剑指offer25题-合并两个有序链表)

在这里插入图片描述

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐