数据结构自学笔记 第二章

数据结构第二章部分笔记

顺序表和链表的比较

链式存储结构的优点

1.结点空间可以动态申请和释放
2.插入和删除时不需要移动数据元素,只需要改变指针

链式存储结构的缺点

1.存储密度小,每个结点的指针域需额外占用存储空间。
**存储密度:结点数据本身占用的空间/**结点占用的空间总量
2.非随机存取,要沿着指针链查找到某一结点,增加了算法复杂度。顺序表和链表的比较

线性表的应用

线性表的合并

假设利用两个线性表La和Lb分别表示两个集合A和B,现要求一个新的集合A=A∪B
La=(7,5,3,11) Lb=(2,6,3) --------> La=(7,5,3,11,2,6)

算法步骤
依次取出Lb中的每个元素,执行以下操作:
1.在La中查找该元素
2.如果找不到,则将其插在La的最后
类C代码    算法时间复杂度 O(ListLength(La)*ListLength(Lb))

有序表的合并

La从小到大排列,Lb也为从小到大排列,要求合并后Lc也是从小到大排列
算法步骤
1.比较两个线性表中第一个元素,最小的放在Lc第一位。
2.刚才较大的和另一个表的第二个比较,小的放在第二位。
3.以此类推,重复的放哪一个表中的都行,直到其中一个表变空。
4.将另一个非空表的剩余结点放在Lc表的最后。

顺序表实现

在这里插入图片描述
在这里插入图片描述
时间复杂度为O(ListLength(La)+ListLength(Lb))
空间复杂度为O(ListLength(La)+ListLength(Lb))

用链表实现

1.先将其中一个链表的头结点作为Lc的头结点pc
2.将pa,pb分别指向两个链表的第一个数据,比较两个数据,小的指针成为pc的next,并令pc=该指针,该指针等于该指针的next
(pc->next=pa;pc=pa;pa=pa->next)
3.以此类推,等到pa(或pb)->next=NULL时,将另一个链表后面加入总链表
(pc->next=pa?pa:pb)
4.释放掉另一个链表的头结点明显 代码更加清晰间接
最坏(最大)时间复杂度为O(ListLength(La)+ListLength(Lb))
空间复杂度为O(1) (不需要额外空间)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值