目录
一、熟悉的算数表达式
由三个部分组成:操作数、运算符、界限符
界限符是必不可少的,反映了计算的先后顺序
二、波兰数学家的灵感
可以不用界限符也能无歧义地表达运算顺序
逆波兰表达式=后缀表达式、波兰表达式=前缀表达式
三、中缀、后缀、前缀表达式
中缀表达式:运算符在两个操作数中间。a + b、a + b - c、a + b - c * d
后缀表达式:运算符在两个操作数后面。a b +、a b + c -、a b + c d * -
前缀表达式:运算符在两个操作数前面。+a b 、- + a b c、- + a b * c d
中缀转后缀的手算方法:
①确定中缀表达式中各个运算符的运算顺序
②选择下一个运算符,按照[左操作数 右操作数 运算符]的方式组合成一个新的操作数
③如果还有运算符没被处理,就继续②
左优先原则,不要FreeStyle,保证手算和计算结果相同
“左优先”原则:只要左边的运算符能先计算,就优先算左边的,保证运算顺序唯一
后缀表达式的计算(手算):
从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数
注:两个操作数的左右顺序
后缀表达式的计算(机算):
用找实现后缀表达式的计算
①从左往右扫描下一个元素,直到处理完所有元素
②若扫描到操作数则压入栈,并回到①,否则执行③
③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①
注:先出栈的是“右操作数”,若表达式合法,则最后栈中只会留下一个元素,就是最终结果
中缀转前缀的手算方法:
①确定中缀表达式中各个运算符的运算顺序
②选择下一个运算符,按照【运算符 左操作数 右操作数】的方式组合成一个新的操作数
③如果还有运算符没被处理,就继续②
“右优先”原则:只要右边的运算符能先计算,就优先算右边的
前缀表达式的计算(机算):
用栈实现前缀表达式的计算:
①从右往左扫描下一个元素,直到处理完所有元素
②若扫描到操作数则压入栈,并回到①;否则执行③
③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①
注:先出栈的是“左操作数”
四、总结