后缀表达式的计算
首先我们先引入后缀表达式: 6 2 / 3 - 4 2 × +
我们把它放到堆栈里面运行一遍
- 首先我们从左向右扫描,遇到6和2,它们放入栈中
- 然后遇到除号,计算6除以2,得到3,放入栈中
- 然后遇到3,放入栈中
- 继续向右,遇到减号,计算3-3,将结果放入栈中
。。。。。。
依次操作得到结果 8
通过上面的例子,我们可以看出堆栈可以很好的处理好这种后缀表达式,那么我们用中缀表达式如何转换为后缀表达式呢?
中缀表达式如何转换为后缀表达式
例:a×(b+c)/ d
- 首先我们遇到从左向右扫描,遇到数字输出,遇到乘号入栈
- 然后我们遇到左括号,入栈;遇到b,输出;遇到加号, 入栈;遇到c,输出
那么符号入栈,出栈的标准是什么?
- 然后我们可以得到
堆栈如何找到栈顶
这里我不作讲解,直接用题目来表示含义
这里最大的误区是把 3 成栈头,那么得到结果就会是(2),但我们要注意的是堆栈的插入和删除操作只能在链栈的栈顶进行(链式存储),所以不能把 3 当成栈头,因为把 3 当成栈头后,执行删除操作时,无法判断下个元素(因为是单向链表)
这样我们可以得出答案(1)
下面我们来看这样一个问题
这里我们要注意的是,存储方式是顺序的,所以date【0】和date【n-1】都可成为栈底
规律总结
- 堆栈的特点:先进后出
- 当Top为-1时,代表堆栈为Null
- 当往堆栈插入一个元素时,Top+1;当往堆栈删除一个元素时,Top-1
- 若以链栈为形式存储时,首先要判断其栈顶位置