栈的应用
括号匹配问题
最后的左括号会最先被匹配(LIFO)
遇到左括号就入栈;
每出现一个右括号,就消耗一个左括号。
表达式求值问题
算术表达式:操作符、运算符、界限符
-
中缀表达式:运算符在两个操作符中间
-
后缀表达式(逆波兰表达式):运算符在两个操作数后面
-
前缀表达式(波兰表达式):运算符在两个操作数前面
中缀表达式 | 后缀表达式 | 前缀表达式 |
---|---|---|
a+b | ab+ | +ab |
a+b-c | ab+ c- | - +ab c |
a+b-c*d | ab+ cd* - | - +ab *cd |
中缀->后缀(手算):
- 确定中缀表达式中各个运算符的运算顺序(运算顺序不唯一,对应后缀表达式也不唯一)
- 选择下一个运算符,按照【左操作数 右操作数 运算符】的方式组合成一个新的操作数
- 如果还有运算符没被处理,就继续2.
==“左优先”原则:==只要左边