精华内容
下载资源
问答
  • 前缀表达式,后缀表达式

    千次阅读 2015-08-13 10:43:09
    这就要考计算机的帮忙了,但是计算机怎么识别运算的优先级呢,这就需要前缀表达式或者后缀表达式了 先说后缀表达式 规则是从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是...

    我们算简单的算术运算十分easy,但是复杂的呢?这就要考计算机的帮忙了,但是计算机怎么识别运算的优先级呢,这就需要前缀表达式或者后缀表达式了

    先说后缀表达式

    规则是从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止,还有就是括号,如果是左括号,直接进栈,之后的符号只要不是右括号就都进栈,不用比较优先级了,当碰见右括号时,左括号之上的元素全部按顺序弹出,左括号删除

    来一个例子:

    (25+3)*(2*(1+4)+6)

    这个从头来,首先有个符号栈

    第一个是“(”进栈

    然后是数字25,直接输出

    “+”号因为之前又左括号所以不必判断优先级,直接进栈

    数字3直接输出

    到了右括号了

    把左括号上的全部输出,是“+”,删除左括号

    然后乘号因为栈里什么都没有,直接进栈

    左括号进栈

    数字2输出

    乘号进栈

    左括号进栈

    数字1输出

    加号进栈

    数字4输出

    碰见右括号,最近的左括号之上的符号全部输出,删除一个最近左括号

    加号碰见栈里的乘号,因为优先级低于乘号,所以弹出栈顶的乘号,就好进栈

    数字6输出

    碰见右括号,直接弹出左括号上面的符号

    如果没有已经结束了,就全部弹出

    所以结果为: 25 3 + 2 1 4 + * 6 + *

    这就是后缀表达式也称逆波兰式



    前缀表达式也称波兰式

    这个与后缀差不多,

    (1) 首先构造一个运算符栈(也可放置括号),运算符(以括号分界点)在栈内遵循越往栈顶优先级不降低的原则进行排列

    (2)从右至左扫描中缀表达式,从右边第一个字符开始判断:如果当前字符是数字,则分析到数字串的结尾并将数字串直接输出

    如果是运算符,则比较优先级。如果当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),则将运算符直接入栈;否则将栈顶运算符出栈并输出,直到当前运算符的优先级大于等于栈顶运算符的优先级(当栈顶是括号时,直接入栈),再将当前运算符入栈。如果是括号,则根据括号的方向进行处理。如果是右括号,则直接入栈;否则,遇左括号前将所有的运算符全部出栈并输出,遇右括号后将左右的两括号一起删除

    (3) 重复上述操作(2)直至扫描结束,将栈内剩余运算符全部出栈并输出,再逆缀输出字符串。中缀表达式也就转换为前缀表达式了。


    再来一个百科中的例子吧


    aaa



    展开全文
  • 前缀表达式 如何根据前缀表达式运算出对应的值 例如 1 + (2 + 3) × 4 - 5 如何将该中缀表达式转换成前缀表达式 我们只需给每一层计算按对应的优先级加上括号 上式则为 ((1+((2+3)×4)))-5...后缀表达式 同样后

    前缀表达式

    如何根据前缀表达式运算出对应的值
    例如 1 + (2 + 3) × 4 - 5
    如何将该中缀表达式转换成前缀表达式
    我们只需给每一层计算按对应的优先级加上括号
    上式则为
    ((1+((2+3)×4)))-5)
    前缀表达即是将符号拿在括号的前面
    -(+(1×(+(23)4))5)
    那怎么将前缀表达式还原成中缀呢
    我们从右到左开始读前缀表达式
    这时候我们会遇见两种情况
    1.当遇到数字则放入栈中
    2.当遇见运算符则把栈中的数字push两个出来并进行运算后放回栈中

    这样最终就会算出结果

    后缀表达式

    同样后缀也是按对应的优先级加上括号,但是我们将符号放在括号后
    ((1((23)+4)×)+5)-
    那怎么将后缀表达式还原成中缀呢
    则从左往右读后缀表达式
    这时候我们会遇见两种情况
    1.当遇到数字则放入栈中
    2.当遇见运算符则把栈中的数字push两个出来并进行运算后放回栈中

    这样最终就会算出结果

    展开全文
  • 中缀与后缀表达式

    2019-11-21 16:08:37
    这里主要说一说中缀怎么后缀表达式,以及怎样根据后缀表达式求值。 中缀转后缀 方法有二。 其一:规则法 1、中缀表达式从左到右依次扫描,遇到操作数,直接输出; 2、遇到操作符需要判断(另:正负号应入...

    前言

    什么是中缀、后缀表达式?还有个前缀表达式。自行百度。这里主要说一说中缀怎么转后缀表达式,以及怎样根据后缀表达式求值。

    中缀转后缀

    方法有二。

    其一:规则法

    1、中缀表达式从左到右依次扫描,遇到操作数,直接输出;
    2、遇到操作符需要判断(另:正负号应算入操作数):
    2.1、'('左括号:直接入栈;
    2.2、')'右括号:依次把栈中的运算符输出,直到出现左括号。将左括号从栈中删除,右括号则丢弃。
    2.3、如果是其他运算符:判断当前扫描到的运算符和栈顶元素的优先级('*、/'为 2,'+、-'为1,'('为0,其他为-1)。如果当前运算符优先级较高,则直接入栈,否则,依次输出比当前运算符优先级高或相等的运算符,直到遇到不符合条件的元素或者遇到左括号为止,再将当前运算符入栈。
    3、扫描结束后,如果运算符存放栈还有元素,则依次输出。
    

    举例:1*3+((2+4)/3+6)

    1输出 结果:1 运算符存放栈:
    *入栈 结果:1 运算符存放栈:*
    3输出 结果:1 3 运算符存放栈:*
    *出栈,+入栈 结果:1 3 * 运算符存放栈:+
    (入栈 结果:1 3 * 运算符存放栈:+(
    (入栈 结果:1 3 * 运算符存放栈:+((
    2输出 结果:1 3 * 2 运算符存放栈:+((
    +入栈 结果:1 3 * 2 运算符存放栈:+((+
    4输出 结果:1 3 * 2 4 运算符存放栈:+((+
    +出栈,(删除,)丢弃 结果:1 3 * 2 4 + 运算符存放栈:+(
    /入栈 结果:1 3 * 2 4 + 运算符存放栈:+(/
    3输出 结果:1 3 * 2 4 + 3 运算符存放栈:+(/
    /出栈,+入栈 结果:1 3 * 2 4 + 3 / 运算符存放栈:+(+
    6输出 结果:1 3 * 2 4 + 3 / 6 运算符存放栈:+(+
    +出栈,(删除,)丢弃 结果:1 3 * 2 4 + 3 / 6 + 运算符存放栈:+
    +出栈 结果:1 3 * 2 4 + 3 / 6 + + 运算符存放栈:

    其二:括号法

    1、先按照运算符的优先级对中缀表达式加括号,得 (1*3)+((((2+4)/3)+6)) ;
    2、将运算符移到括号的后面,得 (13)*((((24)+3)/6)+)+ ;
    3、去掉括号,得 13*24+3/6++ 。
    

    后缀表达式求值

    1、遍历后缀表达式,遇到操作数就入栈;
    2、遇到操作符,就pop两个栈中元素,进行计算,结果再压入栈中。直至得出最终结果。
    

    思想有了,代码就有了~~
    详见中缀与后缀表达式–代码篇

    展开全文
  • 1.介绍 中缀:(5+20+1∗3)/14 后缀:520+13∗+14/ 中缀表达式,就是我们日常适用的算式,...比如这样一个后缀表达式:ABCD-*+ ,怎么算呢? 先从左到右扫描,如果遇上字母,则压倒栈中,这样就把A,B,C,D全部压到...

    1.介绍

    中缀:(5+20+1∗3)/14

    后缀:520+13∗+14/

    中缀表达式,就是我们日常适用的算式,主要是运算符的优先级和括号会改变优先级。我们人用中缀表达式是很方便的,但是计算机算很不方便,所以就有了后缀表达式。

    2.原理与代码

    比如这样一个后缀表达式:ABCD-*+    ,怎么算呢?

           先从左到右扫描,如果遇上字母,则压倒栈中,这样就把A,B,C,D全部压到栈中了,遇到操作符-,则取出两个栈顶的元素C和D,计算C-D=E,再将E压入栈中即可

    那么怎么将中缀表达式转化成后缀表达式呢?

            主要分为三步:

                                       1.按运算符优先级对所有运算符和运算数加括号

                                       2.将运算符移到对应的括号后

                                       3.去掉括号

     

    展开全文
  • 计算机是怎么算出来等于20的呢? 本文讲解的内容是计算机如何使用栈来表达数学中的四则运算和求值。文中有两个主要的概念,分别是后缀表示法和中缀表达式如何转换成后缀表达式。 1.后缀表示法(逆波兰表示,RPN) ...
  • 摘要:来实验室已经两周了...在思考过程中发现,这个计算器的难点就是如何把中缀表达式转换为后缀表达式,以及如何计算后缀表达式。 计算思路 人的思路 如果只是用于解题的话,这种方法是最快最准确的。但是它不适用...
  • 计算器(后缀表达式)

    2013-03-18 14:29:03
    主要就是了解一下怎么把中缀表达式转化成后缀表达式,然后再利用后缀表达式求值,我后续会完善这个程序,做个真正意义上的计算器。。o(∩_∩)o 转化步骤我搜索了一下,大致如下: 将中缀表达式转换为等价的后缀...
  • 上述表达式中,由于我们是一个一个数字和符号输入给程序的,故如何让程序知道运算优先级是个问题(比如,程序怎么知道要先括号里面的内容)。 我们可以通过将上面正常的表达式(中缀表达式)转换为后缀表达式,...
  • Java实现表达式的运算

    千次阅读 2016-06-06 00:37:54
    最近在做个C++课设,需要根据...我们很简单就能算出结果为40,但计算机不行,我们要告诉它怎么算,就需要把中缀表达式转换为后缀表达式了。 基本思路:顺序扫描中缀表达式,当读入一个运算分量时就立即输出;而读入一
  • 这道题也挺经典的,虽然大部分人都用后缀表达式来写,但我打算用我脑子里第一时间想到的方法来写,java评测在100ms-200ms左右,效率虽然不高,但勉强能用。而且这算法没那么高大上,想想就出来了。 第一步就是简单化...
  • 算术表达式的转换

    2017-08-16 16:09:19
    算术表达式的转换 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description ... 因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出
  • 昨天发了一个面试题:关于一道面试题【字符串 '1 + (5 - 2) * 3',怎么算出结果为10,'eval'除外】,受到了各位大大的指点,用一个比较简单的解法就能够计算出来,因此自己在下班后按照各位的指点又实现了一遍,这里...
  • 1、它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。...手工运算怎么算啊? 先根据中缀表达式构造二叉树,运算符为根!中缀表达式是先遍历左子树,接着是根,最后是右子树,如此递归!所以...
  • 小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问题,今天他想解决一下。 因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出算术表达式的前缀式和中缀式呢...
  • 昨天发了一个面试题:关于一道面试题【字符串 ‘1 + (5 - 2) * 3’,怎么算出结果为10,’eval’除外】,受到了各位大大的指点,用一个比较简单的解法就能够计算出来,因此自己在下班后按照各位的指点又实现了一遍,...
  • (2)如果是右括号,则将栈中左括号以及之上的元素依次出栈,如果出栈的元素不是左括号,则加入后缀表达式中(这里用队列来存储,也可以直接输出); (3)如果是其他运算符,如果该操作符优先级比栈顶元素高则直接...
  • 中缀式 前缀式 后缀式 转换

    千次阅读 2017-10-23 22:17:28
    算术表达式的转换 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description ... 因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出
  • 1、人怎么运算波兰(前缀表达式)、逆波兰式(后缀表达式)在介绍波兰、逆波兰式之前,先和大家说一下我们最常用的表达式---中缀表达式。A+B*(C-D)-E*F,对我们来说,这种表达式是最直观的,先括号里的,然后...
  • 我相信许多人都曾想过写一个计算器小程序,但却不知道该怎么下手,只有两个数加减乘除当然简单,但是,只要数的个数一增多,就不知道该怎么写了,主要的困难其实就是判断加减乘除的先后...先来看一下后缀表达式怎么...
  • 从小学起大家就知道,先乘除,再加减,有括号先括号里的内容。那么计算机是如何实现的呢?...这是我们常写的形式,我们称之为中缀表达式,那么后缀表达式怎么写呢?如下: 9 3 1 - 3 * + 10 2 / ...
  • Java—应用栈结构实现计算器

    千次阅读 2018-08-14 11:12:09
    Java—应用栈结构实现计算器 我们在小学学数学的时候,老师总是强调:先乘除,后加减,从左到右,先括号内后括号外,这个都大家都不陌生。...例如:9+(3-1)3+10/2 这样的式子,用后缀表达式是这样的:9 3 1...
  • 用于丈量算法时间复杂度的O(n)、O(1)等是怎么算出来的,比如后缀计算表达式就是O(n),怎么算的: 简单来说,如果一个算法,按照数据输入量的增长,它的运算时间的增长是线性的,那么就是O(n) 比如说,线性搜索...
  • 对于四则运算大家都不陌生了吧! 相信能看懂这篇文章上字的人基本...我们书写的四则运算表达式一般是用中缀式(eg:5*(2+3*(6-3)/5)+7),这样的字符串给计算机运算带来很大的困难,那么我这里引入后缀表达式如下:...
  • 这个也正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...
  • Editplus 3[1].0

    2011-04-02 10:45:21
    这个也正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...
  • 这个也正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...
  • EditPlus.rar +GCC

    2012-02-17 23:12:16
    这个也正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入...
  • 大话数据结构

    2018-12-14 16:02:18
    4.9.3中缀表达式转后缀表达式 108 4.10队列的定义 111 电脑有时会处于疑似死机的状态。就当你失去耐心,打算了reset时。突然它像酒醒了一样,把你刚才点击的所有操作全部都按顺序执行了一遍。 4.11队列的抽象数据...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

后缀表达式怎么算