- 该合辑为笔者自b站自学的“C++数据结构与算法”课程学习记录,旨在将重要的学习要点、思考内容与部分代码进行记录,以便后续自行翻看,亦可给其他读者带来一些参考
- 内容基于笔者自身的理解或感悟,可能存在不妥当或是错误之处
- 系统环境:Win10,Visual Studio 2019
- 图片参考东北大学“数据结构与算法设计”(2020)线上课程讲义
目录
链表在内存中非连续,利用指针来记录元素之间的位置关系,其还可以细分为单向、双向、循环、双向循环、游标链表等,其各有利弊
总体来说,链表比数组实现起来更为为复杂,内存的开销也更大,但其增删操作比数组要更有效率(不用移动所有元素),且在创建时不用考虑开辟多大的内存空间(数组如果为了保险把内存空间开大了可能会造成空间的浪费)
在C++中使用 #include<list>来使用STL链表相关功能,编程事半功倍
单向链表
带有Header头结点,占用空间+1,存储着首元素的指针,无法backword退回,因只用存储后继元素的地址,故一个node节点的占用空间相较于双向链表更小
循环链表
与单链表相比,其末尾元素所存放指针的位置不为空,而是存储首元素的指针,因此可以实现由尾部自头部的跳转
Q 如何判断循环列表是否为空?
A 头结点的指针域里存放的地址若为first则为空
双向链表
一个node有两个指针域,分别记录该节点前驱与后继节点的指针,其可以更为方便的向前或向后遍历,但单个节点占用空间更多 ,因前驱和后继的存在,故插入和删除操作相对更为复杂一些
双向循环链表
较单纯的双向链表更为灵活方便,主要的区别在于是否有头部前驱 和尾部后继节点使链表实现循环
游标链表
因其余链表对于动态存储空间管理频繁使用(new或delete)等操作,造成了内存管理的复杂性,可以尝试用游标(Cursor)链表
The End