中缀表达式转后缀表达式在本文中分为两种方法:
- 手动转换:可以使用加括号法,二叉树法
- 可编程法:维护一个运算符优先级表
后缀表达式转中缀表达式可以用栈
后缀表达式逐个入栈,栈初始为空。非操作符正常入栈,遇到操作符分先后从栈弹出两个操作数A和B(A先弹出),假设操作符为"&",则得到中缀表达式为B&A,再将B&A作为操作数入栈,如此往复。
中缀转后缀
手动转换:
1、括号法:
(1)在中缀表达式中,按照运算符的优先级对运算符所包含的运算单元加括号。比如 a+b*c 加括号后为:(a+(b/c))。
(2)把运算符移动到其对应括号的后方。如:(a(b/c))+
(3)把括号去掉,得到后缀式子。如:abc/+
注:若将运算符移动到括号前面,得到的将是前缀表达式
2、二叉树法
我们容易将中缀表达式转换为一个二叉树,而后序遍历此二叉树将得到后缀表达式
可编码法
注:图源王道考研数据结构
则相应的后缀表达式为:ab+acd+e/f-*-g+