浅谈前、中、后缀表达式

浅谈前、中、后缀表达式

前、中、后缀表达式是信息学奥林匹克竞赛中比较鸡肋的知识点。可是知识点在考纲范围内,并且中缀表达式转后缀表达式是比较有用的知识。因此在这里为你们简单介绍一下。数据结构

以前在自学前、中、后缀表达式的时候,发现网上的不少博客和讲解的思路都不是很明了,或者就是对新手不是很友好,感谢@JZYShurak的讲解,让我对这个东西创建了一个直观的认识。因此我来补一篇比较基础,比较好理解,语言比较简洁的博客。但愿能对各路大佬有所些许的帮助。spa


中缀表达式

中缀表达式就是咱们生活中经常使用的表达式,简单来说,就是人能算的表达式。可是,计算机算不了。。(这里说的计算机算不了不是说这个东西不能用计算机算,而是计算机算人能算的表达式的时候不是像咱们那样思考)。博客

例子:class

\(6\times 12+9-14\)基础

(PS一些可有可无的废话:上面的几个数字对博主有着一些特殊意义(斜眼笑))计算机科学


后缀表达式

为何不用”前——中——后“这个顺序介绍呢?由于中缀表达式是最容易理解的”小学三年级以上的水平就能懂“。然后缀表达式的理解和运算过程则涉及到了一种数据结构:栈。原理

若是对栈还不熟悉或者不明白,就请自行补习了,这应该是计算机科学中最基础的数据结构了。im

还拿上面的例子:新手

\(6\times 12+9-14\)数据

后缀表达式的实现过程是这样的:

首先,建一个存运算符号的栈,一个存数字的栈。

而后,碰到一个符号,就压到符号栈中,碰到数字就压到数字栈中,若是数字栈中有两个数,就从符号栈中弹出一个符号来对这两个数进行运算,把结果压回数字栈中,以此类推。

好比,上面的式子就能够写成以下的后缀表达式:

\(\times 6 + 12 \quad 9 - 14\)

显然,针对一个肯定的中缀表达式,其所对应的后缀表达式不惟一。


前缀表达式

前缀表达式的实现原理和后缀表达式大同小异,而惟一须要注意的是,前缀表达式是从后往前转的!!

也就是说,上面的例子\(6\times 12+9-14\)能够被转成以下的前缀表达式:

\(14-9 \quad 12+6\times\)

相关文章
相关标签/搜索