逆波兰式即为后缀表达式
我们在写算数表达式时,常用的表达式为中缀表达式形如A+(B-C/D)*E;而将中缀表达式转化为后缀表达式则是为了更方便机器进行运算, 后缀表达式形如ABCD/-E*+
中缀转后缀的大体思路为:
首先我们要建立两个数组对象; 一个用于存储符号表达式,另一个则用来记录后缀表达式元素。另外这两个数组采用push, pop的方式模拟栈的行为。
对于符号的操作行为:
- 如果遇到左括号则直接入栈
- 如果遇到右括号,则弹出站内只到出现左括号为止
- 如果站外操作符的优先级高于站内的优先级则入栈
- 如果栈外的操作符优先级低于或等于栈内的优先级,输出栈内的符号,并入栈栈外的符号
- 中缀表达式遍历完成,但是栈中还有符号存在,一一出栈输出
var symbol = ['#', '(', '+', '-', '*', '/', ')']
var symbolPriority = {
'#': 0,
'(': 1,
'+': 2,
'-': 2,
'*': 3,
'/': 3,
')': 4
}
// 如果遇到左括号则直接入栈
// 如果遇到右括号,则弹出站内只到出现左括号为止
// 如果站外操作符的优先级高于站内的优先级则入栈
// 如果栈外的操作符优先级低于或等于栈内的优先级,输出栈内的符号,并入栈栈外的符号
// 中缀表达式遍历完成,但是栈中还有符号存在,一一