一、动态链表的产生
前面的博客我们简单了介绍了线性表,而链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排列,通过改变数组大小实现。而链表不是用顺序实现的,用指针实现,在内存中不连续。意思就是说,链表就是将一系列不连续的内存联系起来,将那种碎片内存进行合理的利用,解决空间的问题。
说的通俗一点,就是链表的出现弥补了顺序线性表对空间的浪费问题,同时他的插入和删除元素要比顺序结构简单的多,免去了移动大量元素的缺点。
二、动态链表概述
一、链式存储结构的定义
线性表的链式存储结构的特点是用任意一组的存储单元存储线性表的数据元素,这组存储单元可以时连续的,也可以时不连续的,这就意味着,这些数据圆度可以存在内存未被占用的任意位置。
因此,为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据圆度ai来说,除了存储其本身的信息之外,还需要存储一个只是其直接后继的信息。我们把存储数据元素信息的域称之为数据域,把存储直接后继位置的域称之为指针域。指针域中存储的信息称之为指针或者链。这两部分信息组成数据元素ai的存储映像,称之为结点(Node),结构如下图。
n个节点链结成一个链表,即为线性表的链式存储结构。因为此链表的每个结点这种之皓寒一个指针域,所以叫单链表,结构如下图。
二、头指针和头结点
头指针:头指针是指链表指向的第一个结点的指针,若链表有头结点,则是指向头结点的指针,头指针须具有标识作用,所以常用头指针冠以链表的名字,无论链表是否为空,头指针均不为空,头指针是链表的必要元素
头结点:头结点时为了操作的同意和方便而设立的,放在第一元素的头结点之前,其数据域一般无真实意义
真实头结点:其第一个结用于存储数据