一、基本理解
线性表是最基本、最简单、也是最常用的一种数据结构。
在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的"线性表",可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。
在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。
二、导图
三、线性表的顺序存储
线性表的存储方法是:将表中的节点一次存放在计算机内存中的一组连续的存储单元中,数据元素在线性表中邻接关系决定他们在存储空间中的存储位置,即逻辑结构中的相邻的节点其存储位置也相邻。用顺序储存实现的线性表称为顺序表,一般使用数组表示顺序表。
四、线性表的链接存储
1、单链表
(1)链表的结点结构
┌───┬───┐
│data │next │
└───┴───┘
data域--存放结点值的数据域
next域--存放结点的直接后继的地址(位置)的指针域(链域)
(2)链表存储方式
链表中的数据是以节点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。
注意:
链表由头指针唯一确定,单链表可以用头指针的名字来命名。
终端结点无后继,故终端结点的指针域为空,即NULL。
2、循环链表
在单链表中,如果让那个最后一个节点的指针域指向第一个节点可以构成循环链表。在循环链表中,从任一节点出发能够扫描整个链表。
3、双向循环链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
小结
线性表的顺序实现和链接实现各有其优缺点,不能笼统的说哪种实现更好。数序表要预先分配储存空间,如果预先分配过大或过小,会造成浪费或发生上溢。单链表不需要预先分配空间,只要内存空间没有耗尽,单链表中的节点个数就没有限制,但是单链表的每个节点包括数据域和指针域,指针域需要占用额外空间。