- 题目
计算:3+2*6-2
(用简单的实例来写思路、代码) - 分析思路
- 通过一个index值(索引),来遍历我们的表达式
- 如果发现是一个数字,就直接入数栈
// 可保存超过1位的数字, 1,12,123,... // 70+1*6-23expression.length=9,不是7,也就是说, // 当遍历"70"时,首先遍历'7',看看下一个是否为字符(isOperation), // 不是的话,就还不push '7',否则push '70'
- 如果发现扫描到的是一个符号,就分如下情况
- 如果当前的符号栈为空,就直接入栈
- 如果符号栈有操作符,就进行比较
- 如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到的结果 如数栈,接着将当前的操作符入符号栈。
- 如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈。
- 当表达式扫描完毕,就顺序的从数栈和符号栈中pop出相应的数和符号,并运行。
- 最后在数栈中只有一个数字(或者说,符号栈为空),就是表达式的结果。
数栈
最后的运算结果步骤:
12-2(=10)
3+10(=13)
符号栈