数据结构第二章部分笔记
顺序表和链表的比较
链式存储结构的优点
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的最后
算法时间复杂度 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) (不需要额外空间)