浅谈前中后缀表达式

Posted fusiwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈前中后缀表达式相关的知识,希望对你有一定的参考价值。

浅谈前、中、后缀表达式

前、中、后缀表达式是信息学奥林匹克竞赛中比较鸡肋的知识点。但是知识点在考纲范围内,而且中缀表达式转后缀表达式是比较有用的知识。所以在这里为大家简单介绍一下。

之前在自学前、中、后缀表达式的时候,发现网上的很多博客和讲解的思路都不是很明了,或者就是对新手不是很友好,感谢@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\)

以上是关于浅谈前中后缀表达式的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——前中后缀表达式的转换(栈的应用)

数据结构学习笔记——前中后缀表达式的转换(栈的应用)

前中后缀表达式定义,求值,及其相互转化

栈5:前中后缀表达式

Java | 在 Java 中执行动态表达式语句: 前中后缀SpELOGNLGroovyJexl3

Mooc数据结构-02堆栈和队列