BG5BJM HAM 📡

前中后缀表达式

中缀表达式

最常见人们最熟悉的运算表达式就是中缀表达式,例如(3+4)*5/6就是中缀表达式。但是计算机很难处理中缀表达式,所以往往需要转换成后缀表达式处理。

后缀表达式

又叫逆波兰表达式,运算符位于操作数之后,例如中缀表达式(3+4)*5/6的后缀表达式写法为3 4+5*6/

中缀表达式转换为后缀表达式

以中缀表达式(3+4)*5/6为例

步骤 扫描元素 后缀表达式 说明
1 ( ( ` ` (入栈
2 3 ( 3 数字3加入表达式
3 + ( + 3 +入栈
4 4 ( + 3 4 数字4加入表达式
5 )   3 4 + 扫描到)闭合括号,将所有顶元素依次出栈,+加入表达式
6 * * 3 4 + *入栈
7 5 * 3 4 + 5 数组5加入表达式
8 / / 3 4 + 5 * *出栈加入表达式,/入栈
9 6 / 3 4 + 5 * 6 数字6加入表达式
10   / 3 4 + 5 * 6 / 表达式结束,所有元素出栈加入表达式

后缀表达式计算求值

以后缀表达式3 4+5*6/为例

步骤 扫描元素 说明
1 3 3 数字3入栈
2 4 3 4 数字4入栈
3 + 7 遇到运算符,弹出4 3+运算获得7并入栈
4 5 7 5 数字5入栈
5 * 35 遇到运算符,弹出5 7*运算获得35并入栈
6 6 35 6 数字6入栈
7 /   遇到运算符,弹出6 35/运算获得5.8333

前缀表达式

前缀表达式又称为波兰表达式,与后缀表达式相反,前缀表达式的运算符位于操作数之前,例如中缀表达式(3+4)*5/6的前缀表达式写法为/*+3 4 5 6

前缀表达式计算求值

以前缀表达式/*+3 4 5 6为例

步骤 扫描元素 说明
1 6 6 数字6入栈
2 5 6 5 数字5入栈
3 4 6 5 4 数字4入栈
4 3 6 5 4 3 数字3入栈
5 + 6 5 7 遇到运算符,弹出3 4+运算获得7并入栈
6 * 6 35 遇到运算符,弹出7 5*+*运算获得35并入栈
7 / 6 遇到运算符,弹出35 6/运算获得5.8333