运算符号放在哪,就是什么类型的表达式
1+1 // 中缀表达式
+11 // 前缀表达式(波兰式)
11+ // 后缀表达式(逆波兰式)
可以通过栈,将中缀表达式转化为前缀表达式或后缀表达式
中缀表达式转化为后缀表达式
需要建立两个数组,一个用于存放转换后的表达式(记为 A 数组),另一个用于暂存运算符(以栈的形式使用,记为 B 栈),需要按照以下规则进行入栈
- 如果是数字,直接入 A 数组
- 如果是左括号( ,直接入 B 栈
- 如果是右括号 ),将 B 栈内的运算符依次出栈(存入 A 中),直到遇到第一个左括号,其中左右括号均舍弃,不入 A 数组
- 对于加减乘除运算符
- 如果栈空或 B 栈顶元素为左括号( ,那么入栈
- 如果它比 B 栈顶元素优先级高,那么入栈,否则依次弹出 B 栈内元素,直到
- 当前栈顶元素与其 同优先级,此时出栈一个元素,然后将刚输入的元素入栈
- 当前栈顶元素为左括号,此时将刚输入的元素入栈(保留左括号)
- 遍历完成后将 B 栈内元素依次出栈