链表(链式存储)
- 单链表
- 定义
- 基本操作的实现
- 单链表的插入
- 按位序插入
- 指定节点的前插
- 指定节点的后插
- 单链表的删除
- 小结
单链表
定义
顺序表优点:可随机存取,存储密度高,缺点:要求大片连续空间,改变容量不方便。
单链表优点:不要求大片连续空间,改变容量方便,缺点:不可随机存取,要耗费一定空间存放指针。
定义单链表的代码:
定义数据领和指针域
定义一个新节点
定义typedef关键字来缩短函数书写麻烦
所以综上定义单链表有两种方式
要表示一个单链表时,只需声明一个头指针L,指向单链表的第一个结点
LNode * L; //声明一个指向单链表第一个结点的指针,或者LinkList L;//声明一个指向单链表第一个结点的指针,后者代码可读性更强。
- 强调这是一个单链表–使用 LinkList
- 强调这是一个结点–使用LNode*
- 二者本质相同,都用于定义一个类型为单链表的指针
初始化一个不带头节点的单链表:
初始化一个带头节点的单链表:
基本操作的实现
单链表的插入
按位序插入
带头结点插入
不带头结点插入
指定节点的前插
- 法1:用已知头指针来遍历链表插入
- 法2:用已知p节点后插入数据来转移数据(时间复杂度为O(1))
指定节点的后插
单链表的删除
- 法1:用已知头指针来遍历链表删除
- 法2:用已知p节点删除数据(时间复杂度为O(1))(且p节点不能为最后一个节点)