对于顺序结构的缺点,我们有没有什么好的解决方法呢?
我们今天要介绍的线性表的链式存储结构就可以很好的解决顺序结构的缺点,一起来看。
链式存储结构,又叫链接存储结构。在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的).
基本介绍
它不要求逻辑上相邻的元素在物理位置上也相邻.因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点.
特点
1、比顺序存储结构的存储密度小(链式存储结构中每个结点都由数据域与指针域两部分组成,相比顺序存储结构增加了存储空间)。
2、逻辑上相邻的节点物理上不必相邻。
3、插入、删除灵活 (不必移动节点,只要改变节点中的指针)。
4、查找节点时链式存储要比顺序存储慢。
5、每个节点是由数据域和指针域组成。
6、由于簇是随机分配的,这也使数据删除后覆盖几率降低,恢复可能提高。
推荐课程:C语言教程。
线性表的最后一个元素是没有直接后继的,所以在链式存储中,我们将最后一个结点的指针域设置为null.
下面我们来看单链表的具体代码实现
typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域,用来指向本节点的直接后继 }LNode,*LinkList; //定义节点,以及头指针
很多同学分不清头指针,头结点,以及第一个结点之间的关系和区别,我们下面简单地区分下。
头指针:是指向链表的指针,如果链表有头结点,它会指向头结点
头结点:第一个结点之前的一个辅助结点,其next指向第一个结点
第一个结点:就是一个结点,data变量存放第一个数据,next指针变量指向第二个结点
这里要注意的就是头指针是一个链表的必要元素,而头结点却不是,那么头结点存在的意义是什么呢?
个人的理解就是使第一个结点的插入操作和删除操作和后面结点的操作一致,否则我们在修改第一个结点的时候,就需要修改头指针。
如果没有头结点,头指针直接指向第一个结点。
以上是线性表的链式存储结构的详细内容。更多信息请关注PHP中文网其他相关文章!