学习时间
2021-01-15
学习内容
线性表
线性表是n个数据元素的有限序列
线性表的逻辑结构
1. 表中只有一个开始节点
2. 表中只有一个终端节点
3. 除了开始节点外,表中的每一个节点均只有一个前驱节点
4. 除了终端节点外,表中的每一个节点均只有一个后继节点
特点:
1. 同一性:都属于同一个数据类型
2. 有穷性:数据元素的个数有限
3. 有序性:线性表中的元素是排列有序的
线性表的顺序存储
顺序表的基本概念
顺序存储是指在内存中用一块地址连续的存储空间按顺序存储线性表的各个数据元素。采用顺序存储结构的线性表就是顺序表。
顺序表中逻辑上相邻的元素在物理存储位置上也是相邻的。
比如,现在我们知道某个顺序表中的第一个元素存储的位置是A,且每一个元素占用x个字节。那么第m个元素的存储位置是:A+(m-1)x
特点:用户物理位置上的相邻表示数据元素之间逻辑相邻的关系,存储密度高,且能随机存取元素。
顺序表相关计算的时间复杂度分析
插入:不难看出,顺序表的插入时间主要消耗在数据元素的移动上。比如在含有n个元素的表上,有n+1个位置可以插入,也就是说在等概率的情况下,顺序表再插入时需要移动一般的元素,故其时间复杂度为O(n)
删除:与插入操作相同,删除一个元素时,其后面的元素都会移动,所以时间复杂度为O(n)
查找:在需要查找的元素在第一个时,查找1次、在最后一个时,查找n次。平均算下来为(n+1)/2,所以时间复杂度为O(n)
合并:一个表长为m的表和一个表长为n的表合并时,其时间复杂度为O(m+n)
线性表的链式存储
链表是通过一组任意的存储单元来存储线性表中的数据元素。存储单元可以连续也可以不连续。
单链表的基本运算的时间复杂度
- 求表长:时间复杂度为O(n)
- 查找:时间复杂度为O(n)
- 插入:时间复杂度为O(n)
- 删除:时间复杂度为O(n)
- 逆置:时间复杂度为O(n)
注意:
- 单链表插入、删除一个节点,必须要知道它的前驱节点
- 单链表不具有按序号随机访问的特点,只能从头开始访问
- 链表实现插入和删除运算时不需要移动节点,只需要移动指针
循环链表就是把一个单链表的尾节点的指针指向他的头结点,使之首尾相连
双向链表也就是说在每一个节点中加上一个指向直接前驱的指针域,但其占用空间更大
静态链表由数组实现,每一个数据元素除了存储信息之外,还要存储逻辑相邻的下一个数据元素在数组中的位置。也就是说,静态链表用数组实现,但逻辑相邻元素不一定在物理位置上也相邻。
顺序表和链表的对比
顺序表的优点
- 用数组存储数据元素,操作简单方便,容易实现
- 不需要为表示节点之间的逻辑关系而花费额外的内存
- 存储密度高
- 可以按元素位序随机存取节点
顺序表的缺点
- 插入删除操作时,需要大量的移动元素,效率低
- 要占用连续的存储空间,存储非陪只能预先进行