栈的应用
表达式转换
中缀转后缀
从左到右扫描表达式,遇到操作数,直接写入结果;遇到运算符按一定规则入栈(拿当前扫描到的运算符和栈顶运算符比较运算优先级):
- 当前==左括号,直接入栈;
- 当前==右括号,不断出栈;
- 栈顶为左括号,当前直接入栈;
- 当前>栈顶,入栈,循环比较
中缀转前缀
从右到左扫描表达式,遇到操作数,直接写入结果(结果也是从右往左写);遇到运算符按一定规则入栈(拿当前扫描到的运算符和栈顶运算符比较运算优先级):
- 当前==右括号,直接入栈;
- 当前==左括号,不断出栈;
- 栈顶为右括号,当前直接入栈;
- 当前>=栈顶,入栈,循环比较
后缀转前缀
表达式求值
中缀表达式求值
两个栈,S1存操作数,S2存运算符;从左到右扫描表达式,遇到操作数,直接入S1,;遇到运算符按一定规则入栈(拿当前扫描到的运算符和栈顶运算符比较运算优先级):
- 当前==左括号,直接入栈;
- 当前==右括号,不断出栈;
- 栈顶为左括号,当前直接入栈;
- 当前>栈顶,入栈,循环比较
后缀表达式求值
一个栈,从左到右扫描表达式,遇到操作数,直接入栈;遇到运算符出栈两个元素运算再入栈
前缀表达式求值
一个栈,从右到左扫描表达式,遇到操作数,直接入栈;遇到运算符出栈两个元素运算再入栈