2023 考研数据结构之栈、队列和数组

本文深入探讨了栈的顺序与链式实现,包括栈的后进先出特性、共享栈优化、以及栈在递归和表达式转换中的应用。同时,介绍了队列(顺序与循环)的基本概念,队列在层次遍历和计算机系统中的角色。多维数组存储方式和特殊矩阵的压缩存储也被提及。关键词:栈、队列、顺序存储、循环队列、表达式树、数据结构、递归、BFS。
摘要由CSDN通过智能技术生成

#第三章 栈 队列 和数组

stack是只允许在一端进行插入和删除操作的线性表。
TOP:线性表允许进行插入删除的那一端
Bottom:固定的,不允许进行插入和删除的另一端
空栈:不含任何元素的空表。

栈的操作特性可以明显的概括为后进先出(Last In First Out,LIFO)
对于n个不同的元素进栈,出栈元素不同排列的个数为1/n+1Cn 2n

顺序栈的实现

采用顺序存储的栈称为顺序栈,他利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶元素的位置
s.top初始时设置为-1.
栈顶元素: S.data[S.top]
进栈操作:栈不满时,栈顶指针先加1,再送值到栈顶元素
出栈操作:栈非空时,先取栈顶元素,再将栈顶指针减一
栈满条件:S.top==MaxSize-1
栈长:s.top+1

共享栈

利用栈底位置相对不变的特性,可以让两个顺序栈共享一个一维数组空间,将两个栈底分别设置在共享空间的两端。
数组从0开始计数
那么 S1.top=-1时 1号栈空
S2.top=maxsize时,2号栈为空
仅当两个栈顶指针相邻时,判断为栈满。即栈顶指针相遇的时候
共享栈不过是为了更好的利用存储空间,两个栈的空间相互调节

栈的存储结构包括

顺序栈和链栈
其本身是一种限制操作点的线性结构

队列

队列是先进先出的一种线性表

顺序存储结构

一块连续的存储单元存储队列中的元素,并且有两个指针:队头指针和队尾指针
队头指针指向队头元素
队尾指针指向对队尾元素的下一个位置
这时候可能出现假溢出现象
即队头由于出队操作,前面为空
而队尾指针指向了MaxSize,尽管存储空间仍为空,但是仍有剩余空间

为了解决上述问题循环队列应运而生
Q.front=MaxSize-1在前进一个就为0,可以用取余来实现
队满条件 Q.rear+1%Maxsize=Q.front
即队头指针在队尾指针的下一个位置可以表示队满
也可以用Q.size=maxsize来表示
也可以添加队满信号tag来实现

链式存储结构

队头指向头结点,队尾指针指向队尾节点
为了方便进行出入队操作,一般都带一个头结点

双端队列

两端都已进行入队和出队操作,分别称为前端和后端,仍然是线性结构

首先将中缀表达式转换为表达式树,然后后序遍历表达式树,所得结果就是后缀表达式。

将中缀表达式转化为表达式树的方法:表达式树的树叶是操作数,而其他节点为操作符,根结点为优先级最低且靠右的操作符(如上述表达式优先级最低是-和+,但-最靠右,所以根为-),圆括号不包括。如上述表达式的表达式树为:

首先将中缀表达式转换为表达式树,然后后序遍历表达式树,所得结果就是后缀表达式。

首先将中缀表达式转换为表达式树,然后后序遍历表达式树,所得结果就是后缀表达式。

https://www.pianshen.com/article/7532296917/

参考来源: https://www.pianshen.com/article/7532296917/

个人认位画表达树的效果更好
然后通过表达树反推过程中各个栈额内容,相当于带着答案找结果

同理后缀转中缀也参考这篇文章
如果对于具体的出栈入栈不理解的话,还可以参考这篇文章

https://www.cnblogs.com/niujifei/p/11603003.html

栈在递归中的应用

递归必须有:递归表达式和边界条件
在递归调用的过程中,系统为每一层的返回点、局部变量、传入实参等开辟了递归工作栈来进行数据存储,递归次数过多容易造成栈溢出。而其效率不高的原因是递归调用过程中包含了很多重复的计算。
可以将递归算法转换为非递归算法,通常需要借助栈来实现

队列在层次遍历中使用
BFS,宽度优先遍历中使用

队列在计算机系统中的应用
Spooling技术,例如打字机缓存数据

数组

多维数组分为按行存储和按列存储
行和列的区别没有太大,考场现推也可以

特殊矩阵的压缩存储

压缩存储:指多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。其目的是节省存储空间
特殊矩阵:指具有许多相同元素或零元素,并且这些相同矩阵元素或零元素的分布有一定的规律性,包括对称矩阵,上下三角矩阵、对角矩阵。
1、对称矩阵:关于主对角线对称、只存放下三角部分(含主对角线)
2、三角矩阵:上三角区所有元素均为同一常量。与对称三角形不同的是存储
完下三角后紧接着存储对角线上方的元素
3、三对角矩阵:类似于之字形存储,第一行和最后一行两个元素,中间那些行每行存储3个元素,沿着主对角线对称。下表K=2i+j-3(从0开始)

稀疏矩阵

绝大多数都是零
将非零常量,行标,列标列出一个表格进行存储,丢失了随机存储的能力(三元组)
或者十字链表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值