一、栈的应用
1.栈在括号匹配中的应用
最后出现的括号最先被匹配,符合栈的后进先出的特性。
基本原理:依次扫描遇到左括号入栈,遇到右括号弹出栈顶元素检查是否匹配。
匹配失败情况:
1.左括号单身 2.右括号单身 3.左右括号不匹配(注意是栈顶元素)
2.栈的表达式求值问题(重点)
1.前缀表达式:运算符在两个操作数前面(右操作符优先)
中缀表达式转前缀表达式,前缀表达式求值。
2.中缀表达式:运算符在两个操作数之间(常见的一般算数形式如:a+b+d)
3.后缀表达式:运算符在操作数后面
中缀表达式转后缀表达式,后缀表达式求值。
中缀转后缀方法:(手算)1.确定中缀表达式中各运算符的顺序(左边的运算符优先在前面) 2.选择下一个运算符按照{左操作、数右操作数、运算符}的方式组合成一个新的操作数。3.如果还有运算符没被处理就继续2
左运算符在前
左运算符没有优先一般是错误的,下面是错误示例
后缀表达式的运算方法:从左往右依次扫描,每遇到一个运算符,就让运算符前面最近的两个操作数进行对应的运算,合体为一个操作数。(注意两个操作数的左右顺序)
用栈实现后缀表达式:
1.从左往右扫描下一个元素,直到处理完所有元素。
2.若扫描到操作数则压入栈,并回到1,否则执行3
3.若扫描到运算符,则弹出两个栈顶元素,执行相应的运算,运算结果压回栈顶,回到1
注意:先出栈的是右操作数