顺序表和链表的区别
顺序表存储地址连续,而链表可以连续也可以不连续。这就需要链表中每个结点不仅要存放数据元素(数据域),还要存放指向其后继元素的地址(指针域)。
数据域:存放元素数值数据
指针域:存放直接后继结点的存放位置
链表里的相关概念
1.结点:数据元素的存储映像,由数据域和指针域两部分组成。
2.链表:n个结点由指针链组成的链表。
3.链表类型
- 单链表:结点中只有一个指针域的链表。
- 双链表:结点中只有两个指针域的链表。
- 循环链表:首尾相连的链表,即尾结点的指针域中存放头节点的地址。
4.头指针、头结点和首元结点
- 头指针:指向链表中第一个结点的指针。
- 首元结点:链表中存储第一个数据元素 a 1 a_1 a1的结点。
- 头结点:在链表的首元结点之前附设的一个结点(为了处理方便)。
5.链表的两种形式(根据有无头结点)
- 不带头结点
- 带头结点
有关链表的几个讨论
1.如何表示空表?
- 无头结点时,头指针为空时表示空表。
- 有头结点时,当头结点的指针域为空时表示空表。
2.在链表中设置头结点有什么好处?
- 便于首元结点的处理
首元结点的地址保存在头结点的指针域中,所以在链表的第一个位置上的操作和其他位置一致,不需要进行特殊处理。 - 便于空表和非空表的同一处理
无论链表是否为空,头指针都是指向头结点的非空指针,因此空表和非空表的处理也就统一了。
3.头结点的数据域内装的是什么?
头结点的数据域内可以为空,也可以存放线性表长度等附加信息,但此节点不计入链表长度值。
链表的特点
- 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻。
- 访问时只能通过头指针进入链表,并通过每个结点的指针域依次向后扫描其余结点,所以寻找第一个结点和最后一个结点所花费的时间不等——这种存取元素的方法称为顺序存取法