中缀表达式与后缀表达式的转换

理解的关键

从最简单的例子出发:
1 + 2 ×3 / 4
转换成后缀表达式:
1 2 3 × 4 / +
关键是要理解:后缀表达式是借用堆栈的后入先出来实现运算的,即:
上述的表达式可以以队列形式写出,然后借用堆栈进行计算:
如果是操作数,压栈,
如果是操作符,一次性弹出两个,分别是操作数2和操作数1
在理解这个原因的基础上,再看,中缀和后缀之间怎么转换

关键是要分开

即操作数和操作符分开对待,转换的结果可以用队列存储,但是,对于操作符的顺序就需要借用一下堆栈了。
观察可发现,后缀表达式的操作符之前一定有两个以上的操作数,如果,在从中缀转换的时候,操作符是需要先暂存一下的,比如这里:
+先用堆栈暂存,然后×,且比+优先级高,先暂存,然后/,这时候,×和/的优先级相等,且×的操作数已经入队列,这时候可以考虑将×弹出入队列。
而最后,当操作数都入队列以后,堆栈里如果还有操作符的话那么从顶到底的操作符优先级一定是从高到低的,这正好符合转换后的要求,直接弹出插入列队即可。

发布了146 篇原创文章 · 获赞 42 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/SmartLoveyu/article/details/96359445