n个结点由指针链组成一个链表。链表的结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻。
链表的每一个结点有两个区域,分别是数据域和指针域。数据域存储的是当前结点的数据值,而指针域存储的是下一个结点的存储地址。
单链表是由头指针唯一确定,因此单链表可以用头指针的名字来命名。
头指针、头结点、首元结点
H表示头指针
如何表示空表
无头结点时,头指针为空时表示空表。有头结点时,当头结点的指针域为空时表示空表。
头结点的数据域内装的是什么?
头结点的数据域可以为空,也可存放线性表长度等附加信息,但此结点不能计入链表长度值。
链表的特点
访问时只能通过头指针进入链表,并通过每个结点的指针域依次向后顺序扫描其余结点,所以寻找第一个结点和最后一个结点所花费的时间不等。链表是顺序存取,顺序表是随机存取。
单链表的定义和表示
例如,存储学生学号、姓名、成绩的单链表结点类型定义如下:
方式一:
方式二:
构造一个空表
#define OK 1
typedef int Status;
判断链表是否为空