“什么是线性结构,其有何特性呢?在数据元素的非空有限集合中,存在唯一的一个被称作“第一个”的数据元素;存在唯一的一个被称作“最后一个”的数据素;除第一个外,集合中的每个数据元素均只有一个前驱;除最后一个外,集合中的每个数据元素均只有一个后继。堆栈也是非常常用的数据结构,今天我们就来揭开它的庐山着面目吧。”
线性表
定义
一个线性表是n个数据元素的有限序列。
例如:英文字母表(A,B,C,……,Z)是一个线性表
特征元素个数n(n≥0) 称为表长度,n=0空表,记为()或φ,1<i<n时
ai的直接前驱是ai-1,a1无直接前驱
ai的直接后继是ai+1,an无直接后继
元素同构(属于同一数据对象)。
线性表--顺序存储
以数据元素物理位置的相邻表示逻辑关系相邻。
优点:随机存取。
缺点:插入和删除的时候,需要移动大量的元素。
线性表--链式映象
单链表
用一组地址任意的存储单元存放线性表中的数据元素。
N个结点通过指针域组成的表
元素(数据的映象)+ 指针(关系的映象) = 结点(数据元素的映象)
单链表存储结构

以线性表中第一个数据元素的存储地址作为线性表的地址,称作线性表的头指针。有时为了操作方便,在第一个结点之前虚加一个“头结点”,以指向头结点的指针为链表的头指针。
循环链表
是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点。

双向链表
“查询” 和单链表相同。
“插入” 和“删除”时需要同时修改两个方向上的指针。

栈
栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS。通常称,栈和队列是限定插入和删除只能在表的“端点”进行的线性表。
栈的定义和特点
定义:限定仅在表尾进行插入或删除操作的线性表。表尾—栈顶,表头—栈底,不含元素的空表称空栈。
特点:先进后出(FILO)或后进先出(LIFO)

栈类型的实现
(1)顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指向表尾的指针top,指示栈顶元素在顺序栈中的位置,称为栈顶指针。连续存储单元的基址用指针base指示,称为栈底指针。
栈的状态:

防止栈溢出:

(2)链栈

入栈和出栈

队列
队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。
定义及特点
定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。
队尾(rear)——允许插入的一端
队
队列特点:先进先出(FIFO)

头(front)——允许删除的一端
队列的分类
链 队 列——链式映象

循环队列——顺序映象

循环队列(基本思想:把队列设想成环形)

后记:通过对线性表、栈、队列的简单介绍,大家不难发现,后两个其实是基于前者的扩展。线性表,存储结构有两种方式,顺存存储(连续的物理存储空间),链式存储(通过指针的方式,把在物理存储上不连续的空间串在一起)。栈:先进后出;队列:现进先出,而其实现方式也有两种,一个物理空间连续,另一个呢,不连续。
学习之路漫长,感兴趣加关注。





