浅谈前、中、后缀表达式
浅谈前、中、后缀表达式
前、中、后缀表达式是信息学奥林匹克竞赛中比较鸡肋的知识点。但是知识点在考纲范围内,而且中缀表达式转后缀表达式是比较有用的知识。所以在这里为大家简单介绍一下。
之前在自学前、中、后缀表达式的时候,发现网上的很多博客和讲解的思路都不是很明了,或者就是对新手不是很友好,感谢@JZYShurak的讲解,让我对这个东西建立了一个直观的认识。所以我来补一篇比较基础,比较好理解,语言比较简洁的博客。希望能对各路大佬有所些许的帮助。
中缀表达式
中缀表达式就是我们生活中常用的表达式,简单来讲,就是人能算的表达式。但是,计算机算不了。。(这里说的计算机算不了不是说这个东西不能用计算机算,而是计算机算人能算的表达式的时候不是像我们那样思考)。
例子:
\(6\times 12+9-14\)。
(PS一些无关紧要的废话:上面的几个数字对博主有着一些特殊意义(斜眼笑))
后缀表达式
为什么不用”前——中——后“这个顺序介绍呢?因为中缀表达式是最容易理解的”小学三年级以上的水平就能懂“。而后缀表达式的理解和运算过程则涉及到了一种数据结构:栈。
如果对栈还不熟悉或者不明白,就请自行补习了,这应该是计算机科学中最基础的数据结构了。
还拿上面的例子:
\(6\times 12+9-14\)。
后缀表达式的实现过程是这样的:
首先,建一个存运算符号的栈,一个存数字的栈。
然后,碰到一个符号,就压到符号栈中,碰到数字就压到数字栈中,如果数字栈中有两个数,就从符号栈中弹出一个符号来对这两个数进行运算,把结果压回数字栈中,以此类推。
比如,上面的式子就可以写成如下的后缀表达式:
\(\times 6 + 12 \quad 9 - 14\)。
显然,针对一个确定的中缀表达式,其所对应的后缀表达式不唯一。
前缀表达式
前缀表达式的实现原理和后缀表达式大同小异,而唯一需要注意的是,前缀表达式是从后往前转的!!
也就是说,上面的例子\(6\times 12+9-14\)可以被转成如下的前缀表达式:
\(14-9 \quad 12+6\times\)。