大家熟悉的算数表达式:1+2+3+(4+5)*5
由三部分组成:操作数,运算符,界限符(反映计算的先后顺序)
后缀表达式(逆波兰表达式):运算符在两个操作数的后面
前缀表达式(波兰表达式):运算符在两个操作数的前面
中缀表达式:运算符在两个操作数中间
如 中缀 后缀 前缀
a+b ab+ +ab
a+b-c ab+c- -+abc
中缀转后缀的手算方法
1.确定中缀表达式中各个运算符的运算顺序
2.选择下一个运算符,按照[左操作数,右操作数,运算符]方式组合成一个新的操作数
3.如果还有运算符处理就继续执行2
注意:后缀表达式有“左优先”原则:只要左边的运算符能先计算,就优先算左边的。
后缀表达式手算方法:
从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数
注意:两个操作数的前后顺序
用栈实现后缀表达式的计算
1.从左往右依次扫描下一个元素,直到处理完所有的元素
2.若扫描到操作数则压入栈,并回到1否则就执行3
3.若扫描到运算符,则弹出两个栈顶元素,执行相应的运算,将运算结果压回栈顶,回到1
注意:先出栈的是右操作数。若表达式合法最后栈中只会留下一个元素,就是最终结果。
中缀转前缀的手算方法
1.确定中缀表达式中各个运算符的运算顺序
2.选择下一个运算符,按照[运算符,左操作数,右操作数]方式组合成一个新的操作数
3.如果还有运算符处理就继续执行2
注意:后缀表达式有“右优先”原则:只要右边的运算符能先计算,就优先算右边的。
用栈实现前缀表达式的计算
1.从右往左依次扫描下一个元素,直到处理完所有的元素
2.若扫描到操作数则压入栈,并回到1否则就执行3
3.若扫描到运算符,则弹出两个栈顶元素,执行相应的运算,将运算结果压回栈顶,回到1
注意:先出栈的是左操作数