有关堆栈的问题

后缀表达式的计算

首先我们先引入后缀表达式: 6 2 / 3 - 4 2 × +

我们把它放到堆栈里面运行一遍

  1. 首先我们从左向右扫描,遇到6和2,它们放入栈中
    在这里插入图片描述
  2. 然后遇到除号,计算6除以2,得到3,放入栈中
    在这里插入图片描述
  3. 然后遇到3,放入栈中
    在这里插入图片描述
  4. 继续向右,遇到减号,计算3-3,将结果放入栈中
    在这里插入图片描述
    。。。。。。

依次操作得到结果 8

通过上面的例子,我们可以看出堆栈可以很好的处理好这种后缀表达式,那么我们用中缀表达式如何转换为后缀表达式呢?

中缀表达式如何转换为后缀表达式

例:a×(b+c)/ d

  1. 首先我们遇到从左向右扫描,遇到数字输出,遇到乘号入栈
    在这里插入图片描述
    在这里插入图片描述
  2. 然后我们遇到左括号,入栈;遇到b,输出;遇到加号, 入栈;遇到c,输出
    在这里插入图片描述
    在这里插入图片描述
    那么符号入栈,出栈的标准是什么?
    在这里插入图片描述
  3. 然后我们可以得到
    在这里插入图片描述在这里插入图片描述
  4. 在这里插入图片描述
    在这里插入图片描述
  5. 在这里插入图片描述

堆栈如何找到栈顶

这里我不作讲解,直接用题目来表示含义
在这里插入图片描述
这里最大的误区是把 3 成栈头,那么得到结果就会是(2),但我们要注意的是堆栈的插入和删除操作只能在链栈的栈顶进行(链式存储),所以不能把 3 当成栈头,因为把 3 当成栈头后,执行删除操作时,无法判断下个元素(因为是单向链表)

这样我们可以得出答案(1)

下面我们来看这样一个问题
在这里插入图片描述
这里我们要注意的是,存储方式是顺序的,所以date【0】和date【n-1】都可成为栈底

规律总结

  1. 堆栈的特点:先进后出
  2. 当Top为-1时,代表堆栈为Null
  3. 当往堆栈插入一个元素时,Top+1;当往堆栈删除一个元素时,Top-1
  4. 若以链栈为形式存储时,首先要判断其栈顶位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值