线性链表
特点:用一组任意的存储单元储蓄线性表的元素(不一定连续)。
节点:线性链表由除了存储本身的信息,还需要存储一个指示后继的信息,这两部分组成数据元素的存储映像,称为节点。
节点包括两个域:存储数据元素信息的域为数据域;存储直接后继的存储位置的域叫做指针域。指针域中存储的信息称作指针或链,多个节点链成为一个链表。
由于此链表的每个节点中只包含一个指针域,故又称为线性链表或单链表。
- 链表的存取必须从头指针开始,头指针指示链表中第一个节点存储的位置。同时,由于最后一个数据元素没有直接的后继,则线性链表最后一个几点指针为“空”(NULL)。
- 有时,我们在单链表的第一个节点之前附设一个节点,称为头结点。
头结点的数据域可以不存储任何信息,也可以存储线性表的长度等类的附加信息,头结点指针域存储指向第一个节点的指针,若线性表为空表,则头结点的指针域为“空”。
- 单链表是一种动态结构,整个可用存储空间可为多个链表共同享用,每个链表占用的空间不需要预先分配,而是可以由系统应需求即使生成。因此,简历线性表的链式存储结构的过程就是一个动态生成链表的过程。
循环链表
特点:表中最后一个节点的指针域指向头结点,整个链表形成一个环。
循环链表操作和线性链表基本一致,差别仅在于算法中判断最后一个节点指针域指向不是空,而是指向头指针。
双向链表
特点:双向链表的节点中有两个指针域,其一指向直接的后继,另一指向直接的前驱。
背景:单链表结果中节点只有一个指针指向后继,查找节点每次只能顺指针往后寻找,若要寻查节点的直接前驱,需要从表头指针出发,为了克服单链表的缺点,衍生双向链表。