栈在表达式求值中的应用
中缀表达式转后缀的手算方法
1、确定中缀表达式中各个运算符的运算顺序zhozn
2、选择下一个运算符,按照 [ 左操作数 右操作数 运算符 ] 的方式组合成一个新的操作数
3、如果还有运算符没被处理,则重复步骤2
**注:**运算顺序不唯一,因此对应的后缀表达式也不唯一。
后缀表达式的手算方法
从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数后再进行后续和别的操作数和运算符的运算。
知道了后缀表达式的手算方法,可以一步一步转回中缀表达式。
用栈实现后缀表达式的计算
1、从左往右扫描下一个元素,直到处理完所有元素
2、若扫描到操作数则压入栈,并回到1执行;否则执行3
3、若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到1
中缀表达式转前缀表达式
1、确定中缀表达式中各个运算符的运算顺序
2、选择下一个运算符,按照 [ 运算符 左操作数 右操作数 ] 的方式组合成一个新的操作数
3、如果还有运算符没被处理,则重复步骤2
右优先原则:只要右边的运算符能先计算,就优先算右边的
栈在递归中的应用
函数调用的特点:最后被调用的函数最先执行结束(LIFO,后进先出)
函数调用时,需要一个栈存储
1、调用返回地址
2、实参
3、局部变量
在递归调用中,函数调用栈可称为“递归工作栈”
每进入一层递归,就将递归调用所需信息压入栈顶,每退出一层递归,就从栈顶弹出相应信息。
缺点:太多层递归可能会导致栈溢出。