1.线性表链式存储结构定义
1.链式存储结构概览
1.结点:
- 对于每个数据元素ai来说,需要存储两个信息:数据元素信息,后继元素的存储地址
- 将这两部分信息整合,称作:结点(Node)
- 结点分为数据域和指针域两部分
- 数据域:存储数据元素信息的域
- 指针域:存储直接后继位置的域
2.存储方式:
- 用一组物理位置任意的存储单元来存放线性表的数据元素
- 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的
- 所以链表中元素的逻辑次序和物理次序不一定相同
3.存取方式:
访问时只能通过头指针进入链表,并通过每个结点的指针域依次向后顺序扫描其余结点,所以寻找第一个结点和最后一个结点所花费的时间不等
4.链表定义:
n个结点由指针链组成一个链表
它是线性表的链式存储映像,称为线性表的链式存储结构
2.链表的分类
1.单链表
每个结点只有一个指针域的链表,称为单链表或线性链表
- 带头结点的单链表
- 不带头结点的单链表
2.双向链表
每个结点有两个指针域的链表,称为双向链表
3.循环链表
首尾相接的链表称为循环链表
3.头指针,头结点和首元结点
- 头指针:是指向链表中第一个结点的指针
- 首元结点:是指链表中存储第一个数据元素 a1 的结点
- 头结点:是在链表的 首元结点之前附设的一个结点;
- 常用头指针为链表命名
4.表示空表的方法
- 无头结点时,头指针为空时表示空表
2.有头结点时,当头结点的指针域为空时表示空表
5.在链表中设置头结点的好处
1.便于首元结点的处理
- 首元结点的地址保存在头结点的指针域中
- 所以在链表的第一个位置上(首元结点)的操作和其它位置一致,无须进行特殊处理
2. 便于空表和非空表的统一处理
无论链表是否为空,头指针都是指向头结点的非空指针
因此空表和非空表的处理也就统一了。