• 浅谈前、中、后缀表达式


    浅谈前、中、后缀表达式

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

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


    中缀表达式

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

    例子:

    (6 imes 12+9-14)

    (PS一些无关紧要的废话:上面的几个数字对博主有着一些特殊意义(斜眼笑))


    后缀表达式

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

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

    还拿上面的例子:

    (6 imes 12+9-14)

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

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

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

    比如,上面的式子就可以写成如下的后缀表达式:

    ( imes 6 + 12 quad 9 - 14)

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


    前缀表达式

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

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

    (14-9 quad 12+6 imes)

  • 相关阅读:
    文件操作:fopen()
    memset函数
    窗体操作:GetWindowLong()
    窗体操作:CBrush类
    窗体操作:GetWindowLong()
    窗体操作:ShowWindow(SW_HIDE)
    文件选择对话框:CFileDialog
    信息提示框:MessageBox
    mysql的text类型长度问题
    PV是什么意思
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11615499.html
Copyright © 2020-2023  润新知