中缀表达式问题
准备两个栈:
一个操作数栈,一个运算符栈。
- 1.遇到操作数直接压栈(操作数栈)
- 2.遇到左括号直接压栈(运算符栈)
- 3.遇到基本运算符分两种情况讨论:
-
- 3.1.运算符栈栈顶元素优先级大于等于当前运算符优先级或者栈顶元素为左括号——直接压栈(运算符栈)
-
- 3.2.运算符栈栈顶元素优先级小于当前运算符优先级
-
-
- 3.2.1运算符栈循环出栈,直到栈顶元素优先级小于等于当前运算符优先级或者栈顶元素为左括号(同3.1)。
-
-
-
- 3.2.2运算符栈每出栈一次,操作数栈出栈两次,且将结果立刻压栈(操作数栈)
-
- 4.遇到右括号
-
- 4.1运算符栈循环出栈,直到遇到左括号为止(左括号也要出栈)
-
- 4.2运算符栈每出栈。。。(同3.2.2)
经过上述操作后,就可以得到一个后缀表达式(双栈)
接下来的求解不细说了,可参考 后缀表达式的值 。