数据结构【栈、队列、特殊矩阵】

文章介绍了栈和队列这两种基本数据结构,包括它们的特点、操作和实现方式,如栈的LIFO特性,队列的FIFO特性,以及它们在括号匹配和算术表达式转换中的应用。此外,还提到了双端队列的概念以及特殊矩阵的存储方式。
摘要由CSDN通过智能技术生成

声明:
在这里插入图片描述

栈顶:top最后一个进入队列的元素。
特性:栈也是一个线性表。先进后出(LIFO)
代码实现:可以使用链表的的方式,然后每次都进行前插操作。
代码实现

共享栈(了解)

也就是一个数组,两个栈进行共同使用。一个从数组的头开始存储,一个栈从数组的尾部进行存储。
判断空间是否满的情况,(因为使用静态数组的方式定义栈一般都会添加定义top的下标位置)top1+top2=maxSize。

队列(QUEUE)

队列也属于线性表
队列:只允许在一端进行添加,在另一端进行删除。
特性:先进先出(FIFO)

队列的操作

最先插入的为rear,最后插入的为front
一端删除、一端添加,先进先出。定义rear front来记录队尾和队头
队尾的计算:(rear+1)%MaxSize; 向后移动一位
判空:rear==front
队满:(rear+1)%MaxSize = front
计算队列目前元素个数:(rear+maxSize-front)%maxSize;

双端队列

双端队列:见名知意,也就是队列的两边都可以进行插入、删除操作。
特点:一般不考代码,会考试 队列 入 / 出 的合法性。
卡特兰数:计算队列合法 出队的,最大序列数:在这里插入图片描述

栈和队列的应用

括号匹配问题

特性:遇到左括号进行压入栈中,遇到右括号进行弹。出栈。
代码操作:遍历存储所有符号的数组,然后进行匹配左括号压入栈中,扫描到右括号然后去栈中获取左括号并进行匹配+栈的空判断,匹配成功左括号出栈… 直到遍历结束,还要加上 判断栈是否为空,防止还有左括号没有匹配的情况。

示例

在这里插入图片描述
在这里插入图片描述

算术表达式(常考)

术语:波兰表达式
波兰表达式=前缀表达式
逆波兰表达式=后缀表达式
中缀表达式:也就是平常使用的表达式 a+b 这样的

中缀转后缀

示例

根据 + - * / 它们运算的优先级进行排序的。
手选的话,如果 * 和 / 同级别的话,按照 左优先原则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后缀转中缀

在这里插入图片描述

代码操作

逻辑: 根据栈的特性。先进后出,依次从左到右扫描 后缀表达式,扫描到操作数,那么压入栈中,扫描到运算符,弹出前面的两个操作数进行计算(注意:第一个弹出的应该在运算符的右边),然后将计算结果再存入栈中。
在这里插入图片描述

转换练习

在这里插入图片描述

中缀转前缀

类似于左缀。“右优先”原则

在这里插入图片描述

前缀转换中缀

逻辑:和后缀逻辑一样,基于栈,只不过 扫描是从前缀表达式的 **右边开始
** 扫描到运算符的话,也是先弹出的在 右边。
在这里插入图片描述

示例练习

在这里插入图片描述

特殊矩阵

按列存储,按行存储。
按照列存储:计算矩阵中某个值的地址空间位置,那么就把当前值,前面的数据地址按列都进行相加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值