后缀表达式、前缀表达式

后缀表达式、前缀表达式后缀表达式和前缀表达式是什么呢 nbsp nbsp nbsp nbsp nbsp 前缀表达式 不包括括号的算术表达式 将运算符写在前面 操作数写在后面的表达式 为纪念其发明者波兰数学家 JanLukasiewc 也称 波兰式 nbsp nbsp nbsp nbsp nbsp 后缀表达式 不包括括号 运算符放在两个运算对象的后面 所有的计算按运算符出现的顺序 严格从左向右进行 也称 逆波兰式 nbsp nbsp nbsp nbsp nbsp 举个栗子 nbsp nbsp nbsp nbsp nbsp nbsp

         后缀表达式和前缀表达式是什么呢?

         前缀表达式:不包括括号的算术表达式,将运算符写在前面,操作数写在后面的表达式。为纪念其发明者波兰数学家Jan Lukasiewcz,也称“波兰式”。

         后缀表达式:不包括括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行。也称“逆波兰式”

         举个栗子:

                          3+4            这是中序表达式(就是我们平时的写法)

                          34+            这就是后缀表达式

                          +34            即前缀表达式

         

         那么如何把中序表达式写成后缀或者前缀的形式呢?

         手动转:

                     例:3+(2-5)*6/3

                     转后缀:先将它根据运算顺序加上括号,即   (3+(((2-5)*6)/3))

                                   然后从最开始的括号开始,保留数字,把当前运算所用的运算符放到该括号后面

                                   第一步:(3+(((25)-*6)/3))        这里算的是2-5,所以保留2和5,把-放到(2-5)这个括号后

                                   第二步:(3+(((25)-6)*/3))        这里算的是(2-5)*6,为乘运算,所以把*放到该运算括号后

                                   第三步:(3+(((25)-6)*3)/)        以此类推

                                   第四步:(3(((25)-6)*3)/)+         

                                   第五步:325-6*3/+                  最后删掉所有括号就好啦

                     如果你不确定是否正确,用后缀表达式计算一下值,两式值一样就对啦

                     转前缀:同样先加括号,即(3+(((2-5)*6)/3))

                                   然后从最开始的括号开始,保留数字,把当前运算所用的运算符放到前面!(和后缀相反)

                                   第一步:(3+((-(25)*6)/3))        把-放到括号前面

                                   第二步:(3+(*(-(25)6)/3))        以此类推

                                   第三步:(3+/(*(-(25)6)3))

                                   第四步:+(3/(*(-(25)6)3))

                                   第五步:+3/*-2563

                     同样,不确定的话,验证一下

         那么后缀表达式是如何进行计算的呢?

         例:325-6*3/+

                这里规则是:从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号,就将处于栈顶的两个数字出栈进行运算,将运算结果入栈,一直到得到最后结果。 

                1.首先,我们初始化一个空栈,此栈用来进出数字。

                2.后缀表达式前三个都是数字,所以进栈

                3. –  不是数字,所以 2 和 5 出栈,进行运算,(这里注意后出栈的在运算符前面,即 2 后出,所以是 2 – 5 ),将运算结果入栈(-3)

                4.数字 6 入栈

                5. *  不是数字,所以 -3 和 6 出栈,-3 * 6 = -18,-18 入栈

                6. 数字 3 入栈

                7.  /  不是数字,所以 3 和 -18 出栈,-18 / 3 = -6 , -6 入栈

                8. +  不是数字,所以 3 和 -6 出栈, 3 + ( -6 ) = -3

                9.运算结束

                图示:

                    后缀表达式、前缀表达式         对于前缀表达式的运算后续更新……

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205169.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:38
下一篇 2026年3月19日 下午6:38


相关推荐

  • Spring Framework 简介

    Spring Framework 简介SpringFramework依赖注入、事务管理、Web应用程序、数据访问、消息传递、测试和更多的核心支持。Tips:Spring 官网:https://spring.io/spr

    2022年8月4日
    9
  • matlab差值报错,matlab插值介绍「建议收藏」

    matlab差值报错,matlab插值介绍「建议收藏」1、一维插值:已知离散点上的数据集,即已知在点集X=上的函数值Y=,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。MATLAB命令:yi=interp1(X,Y,xi,method)该命令用指定的算法找出一个一元函数,然后以给出处的值。xi可以是一个标量,也可以是一个向量,是向量时,必须单调,method可以下列方法之一:‘neares…

    2022年5月29日
    34
  • 四阶魔方用三阶魔方公式时,两个特殊情况处理方式(顶面十字、最后一步)

    四阶魔方用三阶魔方公式时,两个特殊情况处理方式(顶面十字、最后一步)四阶魔方的玩法比较简单的 就是把他变成三阶魔方 然后用三阶魔方公式还原 三阶魔方还原 一共只记 6 个公式即可 https blog csdn net Bob yuan article details 1 先按照面与面的对应关系 把 6 个面的中心 4 个块拼好 因为四阶魔方面与面的对应不是固定的 所以要看角块的颜色分布 来判断面与面对应关系 比如一个角块颜色是红 绿 黄 那

    2026年3月17日
    2
  • n8n 介紹:開源工作流程自動化神器,讓普通人也能輕鬆上手

    n8n 介紹:開源工作流程自動化神器,讓普通人也能輕鬆上手

    2026年3月15日
    2
  • 初识Modbus TCP————-C编写Modbus TCP客户端程序(一)

    初识Modbus TCP————-C编写Modbus TCP客户端程序(一)废话少说 我们直接上干的 学习知识 第一个是收集和查阅资料 这个是必须的

    2026年3月18日
    1
  • 数据结构:表达式求值

    数据结构:表达式求值数据结构:表达式求值表达式求值是程序设计语言编译的一个最基本问题,其中任何一个表达式都是由操作数、运算符(±*/)、界限符(#,(,),[,])组成。运算符和界限符统称算符。算符的优先级关系为(数学角度上):为了通过代码实现,我们定义两个工作栈,一个叫OPTR,存运算符和界限符;另一个存OPND,存操作数或运算结果。首先OPND为空栈,OPTR首先存’#’为栈底元素。依次读取算术表达式…

    2022年6月15日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号