数据结构是一种特殊的组织和存储数据的方式,使我们可以更高效的对存储的数据执行操作。以下介绍常用的数据结构中的链表结构。
链表是一种顺序结构,由相互链接的线性顺序项目序列组成,只能顺序访问,不能随机访问。
- 单链表中的概念:
- 链表中的元素成为结点
- 每个结点包含两个域:数据域和指针域。
- 链表的头结点(head):仅存放地址,可以不存放数据,起标识单链表的作用。
- 链表的尾结点的指针为空。
- 链表的类型:
- 单链表:只能单向遍历结点。
- 使用单链表示线性表时,数据元素之间的逻辑关系是由结点中的指针指示的,逻辑上相邻的两个数据元素其存储的物理位置不要求相邻。
- 可由头指针唯一确定。
- 双链表:可以正向和反向遍历结点。结点中有两个指针域,一个指向后继结点,一个指向前驱结点。
- 循环链表:尾结点的指针指向头结点,整个链表形成一个环。
- 单链表:只能单向遍历结点。
- 单链表的操作:
- 搜索:通过线性搜索在给定链表中找出key为k的第一个元素,并返回该元素的指针
- 创建链表:
- 前插法:将新结点逐个插入头结点之后。①创建一个只有头结点的空链表;②每读入一个数据元素则申请一个新结点;③将新节点插入到头结点之后。
- 后插法:将新节点逐个插入到联表尾结点之后。①创建一个只有头结点的空链表L;②增加一个尾指针r指向尾结点(初始时指向头节点);③每读入一个数据元素则申请一个新结点;④将新结点插入到尾结点r之后;⑤将r指向新的尾结点。
- 插入:把链表先一分为二,再用新结点把它们连接起来。
已知头指针head、插入位置前的结点指针pGuard,使用先连后断的方式,把新结点和后结点连接,再把插入未知之前的结点与后结点断开并与新结点连接。如图:
-
- 删除:采用先连后断的方式,先把待删除结点的前驱结点和它后继结点连接,再把待删除的结点与它的后继结点断开,并释放待删除结点的空间。如下图:
- 链表的应用
- 用于编译器设计中的符号表管理。
- 用于Alt Tab(使用循环链表实现)的程序之间进行切换。
以上总结,参考:https://mp.weixin.qq.com/s/rycQvasVNGcozyDiropSow、https://www.jianshu.com/p/2db20e1115a8。