线性表的链式存储结构:线性表的数据结构(结点)在存储器中的位置是任意的,
即逻辑上相邻的数据元素在物理位置上不一定相邻。
一.与链式结构相关的术语:
1.结点:数据元素的存储映像,由数据域和指针域两部分组成。
2.链表:n个结点由指针链组成的一个链表。(链表是线性表的链式存储映像,称为线性表的链式存储结构)
链表是顺序存取的;顺序表是随意存取的。
因为链表只有知道第一个、才可以知道第二个、第三个...第i个..一直才到最后一个,就是一个一个的拿,因此是顺序存取;(但是物理位置上是随意的)
顺序表:顺序表相当于一条龙下来的,不需要一个一个的根据地址找,直接根据公式找就行了,所以是随意存取(但是物理位置是顺序的)
二.链表的分类
1.链表分为单链表、双链表、循环链表:
2.链表的存储结构也会分成两种形式:
❶带头结点:就是在第一个数据元素存储之前又加了一个结点
❷不带头节点:就是第一个结点就存储着第一个数据元素
三.头指针、头结点和首元结点(有头结点):
头指针:指向链表中的第一个结点的指针(不是头结点里面的指针)
首元结点:链表中存储第一个数据元素a1的结点
头结点:在首元结点之前附设的一个结点
关系如图:
四.问题解释
❶如何表示空表?
答:无头结点时,头指针为空时表示空表;
有头结点时,当头结点的指针域为空时表示空表
❷在链表中设置头结点的好处?
1.便于首元结点的处理;首元结点的地址保存在头结点的指针域上,所以在链表的第一个位置上操作和其他位置一致,无需进行特殊处理;
2.便于空表和非空表的统一处理;无论链表是否为空,头指针都是指向头结点的非空指针,因此空表和非空表的处理方式统一;(就是无论是空表还是非空表,与头指针都没有关系了,主要取决于头结点的指针域是否为空。)
❸头结点的数据域内装的是什么?
答:头结点的数据域可以为空,也可以存放线性表长度等附加信息;但头结点不能计入链表长度值
五.链表(链式存储结构)的特点:
⑴结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理位置上不一定相邻。
⑵访问时只能通过头指针进入链表,并且通过每个结点的指针域依次向后顺序扫描其余节点,所以寻找第一个结点和最后一个结点花费的时间不等,这种存取方式叫“顺序存取法”