结点
结点相当于一个环,环环相扣时就组成了一个链表。在结点中主要存储着两部分信息,一部分是数据域:用来存放数据元素的信息,一个是指针域,用来存放下一个结点所在的地址,方便我们查找下一个结点,正因为存在者指针域,将各个结点链接起来,才组成了一个链表。
动态链表的官方定义:
为了表示每个数据元素ai与其直接后继数据元素ai+1 之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称做指针或链。这两部分信息组成数据元素ai的存储映像,称为结点(Node)。
我自己理解的链表:是由多个结点链接起来的线性表。
因此,n个结点(ai 的存储映像)链结成一个链表,即为线性表(a1, a2, ....,an)的链式存储结构,因为此链表的每个结点中只包含一个指针域, 所以叫做单链表。
头结点和头指针
那么问题来了,我们如何从哪里开始去查询一个链表呢?为了解决这个问题,我们设置了一个结点:头结点
头结点:是指链表中的第一个结点,有着真实头结点和虚拟头结点之分。
真实头结点:第一个结点用于存储数据。
虚拟头结点:第一个结点不允许存放数据。(我们这次采用的是虚拟头结点)
头指针:仅仅是一个引用变量,用来存储头结点地址的指针。
尾指针:同头指针,不过是链表中最后一个结点的指针。
线性表
到此链表的基础知识已经讲完了,然后来看具体的实现。在顺序存储结构中的线性表,我们之前是用数据来实现的。今天我们来看如何用链表来实现线性表。这是类图。
链表实现的线性表任然