线性表的链式表示与实现
记录第一个地址的指针叫做头指针,顺藤摸瓜找到其他元素的位置。
单链表是由头指针唯一确定,因此单链表可由头指针的名字来命名。
图中:head指向的是 a 的存储地址。也就是首地址。
首元结点中存储的是 a 和其直接后继 b 的地址。
每个结点由两个域组成:
数据域:存储元素值数据
指针域:存储直接后继结点的存储地址。
与链式存储有关系的术语:
1、结点:数据元素的存储映像:由指针域和数据域两部分组成
2、链表:n个结点由指针链组成的一个链表。
- 带头结点单链表
头指针指向头节点,头节点的指针域存储首元节点的地址。
- 不带头节点的单链表:
头节点存放第一个元素的地址,
讨论1:如何表示空表?
- 无头结点时,头指针为空时 表示空表。
head == NULL;
- 有头节点时,当头节点的指针域为空时 表示空表。
head->next == NULL;
讨论2:在链表中附设头结点的好处?
- 便于首元结点的处理
- 首元结点的地址保存在头节点的指针域中,所以在链表的第一个位置上的操作和其他位置上一致,无须特殊处理;
- 便于空表和非空表的统一处理
- 无论链表是否为空,头指针都是指向头结点的非空指针,因此空表和非空表的处理也就统一了。
讨论3:头结点的数据域内存储的是什么?
链表的特点
- 顺序表–通过下标随机存随机取
- 链表–必须顺藤摸瓜存顺藤摸瓜取。找第 i ,必须找到第 i-1。