第二章 2.6 线性表的第三类:纯链表及可能的缺点
来源:互联网 发布:电脑手写板软件下载 编辑:程序博客网 时间:2024/04/28 16:43
在链式数组表的基础上,我们进一步把元素部分也用链式思想完成,这就是纯链表。
因为每一个元素之间都通过指针链接,因此纯链表无法进行随机访问,无论是访问元素N,还是元素N+10,都必须从第一个元素开始依次遍历。
比起链式数组,无疑在随机存取方面效率会差得多,但同时,纯链表非常适合插入删除操作,因为不需要搬运元素,只需要改变指针的前后逻辑关系。
插入时仅仅改变两个指针的逻辑关系,其他元素不需要做任何操作。
删除元素时同样如此,效率极高。
值得注意的是,尽管纯链表的插入和删除效率很高,但总体完成一次插入或删除操作的效率并不高。
这是因为要插入或删除第i个节点,必须先找到第i-1个节点,复杂度为o(n)。
链式数组在插入删除的时候,要移动元素,复杂度为o(n)。
总体完成一次操作,纯链表与数组都是o(n)的复杂度,为什么教材和网路上都说,要频繁删除插入操作时,选链表?
我琢磨了好几天,都没想通。
至于说链表是动态结构,不需要预先分配空间,应需求及时生成,动态数组一样能实现该功能。
要说压倒性优势吧,只有在插入删除表头部分时,链表是o(1),数组为o(n)。
动态分配的链表可能会有如下缺点:
1. 造成内存泄漏;由于开发人员代码编写不谨慎,没能及时free掉malloc分配完成的内存。
2. 反复的malloc,free,会造成内存碎片化。
3. cache不友好,根据局部化原理,计算机系统会将连续的内存block读入cache,但是由于链表指针无法预测具体存
1. 造成内存泄漏;由于开发人员代码编写不谨慎,没能及时free掉malloc分配完成的内存。
2. 反复的malloc,free,会造成内存碎片化。
3. cache不友好,根据局部化原理,计算机系统会将连续的内存block读入cache,但是由于链表指针无法预测具体存
储位置,造成cache-miss 。
4. 链表也不节约空间,因为除了数据本身,还需要额外保存指针,反而会造成空间上的浪费。
这样一综合,实在看不出链表独特的优势在哪里,但是人们既然创造了链表,必定有其无法替代的地方,只是我初学
水平太低还没能领悟到。
0 0
- 第二章 2.6 线性表的第三类:纯链表及可能的缺点
- 第二章 线性表 2.1线性表的定义
- 第二章《线性表的实验》
- 第二章线性表的总结
- (数据结构第二章)线性表的实现
- 平方探测和线性探测解决散列表冲突的区别(优点及缺点)
- requirejs的优点及缺点
- 多线程的优点及缺点
- mvc的优势及缺点
- SpringBoot的优点及缺点
- 第二章 2.4 线性表的第二类:链式数组表
- 第三周第一节课(第二章--线性表)
- 第三周第二课--线性表
- 《Python核心编程》第二版课后习题——第三章(记录自己做的习题,可能有误)
- 第二章 线性表 顺序表的实现
- 第二章 线性表(链表的建立与合并)
- 第二章、线性表的顺序表示和实现
- 第二章:线性表的思维导图
- 中午团餐的时候
- AsyncTask源码解析
- 爱的方式电话官方数据大家圣诞节过得
- 段时间会尽快速度速度集合圣诞节快发货考试的话
- Daydream VR 开发
- 第二章 2.6 线性表的第三类:纯链表及可能的缺点
- 光的本质(一)之光的产生
- 三天康复颈椎-序言2
- 在 Win7 环境使用 hyperledger fabric source code 模拟 IBM Bluemix Blockchain Service
- 逻辑运算
- 328. Odd Even Linked List
- spring cloud比较不错的文章
- UVA 1325 Hypertransmission(枚举)
- Android-Style样式表