线性表是数据结构中最简单的一种结构,根据线性结构的存储类型,分为顺序表和链表。
顺序表就是数组,也称为向量vector高维向量称为张量即tensor。
链表的分类分为单链表、双链表、循环链表等。
线性结构是由节点集和关系集组成的二元组,节点集由有限的顺序元组组成;关系集由前驱和后继关系组成。
前驱/后继关系r,具有 反对称性 和 传递性
在线性结构中,头一个称为表头,最后一个称为表尾,其他称为内部元素。
线性表中的相关概念
·线性表简称表,是零个或多个元素的有穷序列,线性表的每个节点都由同类型的元素组成。通常可以表示成K0,k1,···,kn-1(n≥1)。
-表目:线性表中的元素(可包含多个数据项,记录)元素长度是均匀的,元素位置是有序的,线性表元素的逻辑结构在存储上也需要对应的表达。
线性表的存储结构
-索引(下标):i称为表目ki的’’索引’’或 ‘’下标’’,元素在线性表中的位置称为下标或者是索引,元素的个数称为表长。
-表的长度:长度为零的线性表(n=0),为0的表就是空表,线性表易于存储和操作
对于小规模的应用采用简单的线性表来实现是非常有效的。
线性结构划分:
-直接访问型:向量、记录。可以根据下标定位元素的位置,例如数组向量就是直接访问的线性表。单个的记录类型也是线性结构。
-顺序访问型:顺序文件、栈、队列、广义表。顺序访问型必须在表中挨个查找所需元素,例如链表为了提高检索的速度
-目录索引型:字典、散列表
线性表的三个方面:
·线性表的逻辑结构
·线性表的存储结构
·线性表运算
线性表的逻辑结构主要属性包括:
-线性表的长度
-表尾
-当前位置 记录当前位置有利于相关的运算
线性表的存储结构:
·顺序表
-顺序表是一个非常高效的存储结构,物理存储关系就表达了逻辑关系,不需要额外的存储域来表达逻辑上的相邻关系,可以非常紧密地存储相关数据。按索引之从小到大存放在一篇相邻的连续区域
-紧凑结构,存储密度就是有效元素占存储空间的比例可以达到1。
·链表
链表需要通过指针链接的关系来表达逻辑的序。因此需要指针的额外存储空间。
-单链表
-双链表
-循环链表
链表和顺序表的对比:
链表的存储效率不如顺序表:
线性表分类(按操作)
·线性表:-不限制操作
·栈 :-在同一端操作
栈的插入和删除限制在同一端进行,栈的先进后出性质在深度优先搜索、递归等算法中有很好的应用。
·队列 :-在两端操作
队列的插入和删除分别在两端进行,队列的先进先出性质在宽度优先搜索、层次化处理算法中有很好的应用。
栈(LIFO, Last In First Out) – 插入和删除操作都限制在表的同一端进行
栈可以说是最简单的组合数据结构,栈顶随着元素的增减而发生变化。栈底没有暴露被弹出的化会被一直压着不发生变化。编译系统的调用底层就是,递归栈来支持的。深度优先方法的递推处理,也要用到栈。
队列(FIFO, First In First Out) – 插入操作在表的一端, 删除操作在另一端
队列跟栈一样是一种基础数据结构,按先入先出的调度算法,以及宽度优先搜索等算法都需要用到队列。
对于一个数据结构,往往要考虑怎么样建立这个数据结构,以及销毁这个结构,把对应的存储空间返回给内存。
在线性表中往往是先getPos找到指定元素,然后再做插入删除修改操作,有的情况可以删除旧值再添加新值。