复习上一章:
顺序表的特点: 以物理位置相邻表示逻辑关系
顺序表的优点: 任一素均可随机存取
顺序表的缺点: 进行插入和删除操作时, 需移动大量的素. 存储空间不灵活
顺序表的特点是什么?
1) 利用数据素的存储位置表示线性表中相邻数据素之间的前后关系, 即线性表的逻辑结构与存储结构一致
2) 在访问线性表时, 可以快速计算出任何一个数据素的存储地址. 因此可以粗略地认为, 访问每个素所花时间相等
这种存取素的方法被称为随机存取法
顺序表的优点是什么?
优点:
存储密度大 (结点本身所占存储量/ 结点结构所占存储量)
可以随机存取表中任一素
顺序表的缺点是什么?
缺点:
在插入,删除某一素时候, 需要移动大量素
浪费存储空间
属于静态存储形式, 数据素的个数不能自由扩充
解决方法: 我们可以通过链表解决上述问题.
什么是链式存储结构?
结点在存储器中的位置是任意的, 即逻辑上相邻的数据素在物理上不一定相邻
线性表的链式表示又称为 分顺序映像 或 链式映像
用一组物理位置任意的存储单来存放线性表的数据素
这组存储单既可以是连续的, 也可以是不连续的, 甚至是零散分布在内存中的任意位置上的
链表中的素的逻辑次序和物理次序不一定相同
结点由 数据域和指针域组成
链 又称作 指针
第一个也叫头指针
单链表是由头指针唯一确定, 因此单链表可以用头指针的名字来命名
各结点由几个域组成? 具体指的是什么?
各结点 由 两个域组成
分别是 数据域: 存储素数值数据
指针域: 存储直接后继结点的存储位置
数据 指针
与链式存储有关的术语:
1.结点: 数据素的存储映像. 由数据域和指针域两部分组成
数据域 指针域 2. 链表: n个结点由指针链组成一个链表
线性表的链式表示和实现:
单链表, 双链表, 循环链表
单链表: 结点只有一个指针域的链表, 称为单链表或者 叫做线性链表
双链表: 结点只有两个指针域的链表 称为双链表
循环链表: 首位相接的链表称为循环链表
头节点不是用来填充素的
链表的存储结构则出现两种形式:
1)不带头结点
2)带头结点
如何表示空表?
空表: 就是一个表中 没有数据素 表长为 0
无头结点时, 头指针为空时表示空表
有头结点时, 头结点的指针域为空时 表示空表
在链表中设置头结点 有什么好处?
1.便于首结点的处理
首结点的地址保存在头结点的指针域中, 所以在链表的第一个位置上的操作和其他位置一致, 无须进行特殊处理
2. 便于空表和非空表的统一处理
无论链表是否为空, 头指针都是指向头结点的非空指针, 因此空表和非空表的处理也就统一了
头结点的数据域内装的是什么?
头结点的数据域可以为空, 也可存放线性表长度等附加信息, 但此结点不能计入链表长度值
链表 (链式存储结构) 的特点是什么?
1) 结点在存储器中的位置时任意的, 即逻辑上相邻的数据素 在物理上不一定相邻
2) 访问时只能通过头指针进入链表, 并通过每个结点的指针域 依次向后顺序扫描其余结点, 所以寻找第一个结点和最后一个结点所花费的时间不等
上述 的这种存取素的方法 被称为 顺序存储法
而 顺序表 为 随机存取法
微总结:
循环链表 又可以分为 单循环链表和双循环链表
带头结点的单链表:
像这种包含两部分数据, 我们在高级语言中一般用 结构体 来实现
补充单链表的几个常用简单算法
1) 补充算法 ——-判断链表是否为空:
空表: 链表中无素, 称为空链表 (头指针和头结点仍然在)
即判断 头结点指针域是否为空 就可以了
头结点指针域为空 即可清空链表L
2) 单链表的销毁: 链表销毁后不存在
算法思路: 从头指针开始, 依次释放所有结点
3) 清空链表
链表仍存在, 但链表中无素, 成为空链表 (头指针和头结点仍然在)
算法思路: 依次释放所有结点, 并将头结点指针域设置为空
4) 求单链表的表长
算法思路: 从首结点开始, 依次计数所有结点
总结:
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/151138.html