美文网首页
栈的经典案例,及后缀表达式的原理

栈的经典案例,及后缀表达式的原理

作者: mlyman | 来源:发表于2018-02-02 17:11 被阅读0次

在程序开发中我们都是使用中缀表达式例如:

    3 × 2 +1 ÷ ( 6÷3) - 7 

运算符都是在两个操作数的中间部分,而计算机通常使用的是后缀表达式;那什么是后缀表达式呢,举例说明,我们知道在数学运算中是有优先级的,一般是带有括号的优先级最高,然后是乘除法,之后再是加减法,而计算机为了提高效率,会把数字放在运算符的前面,例如:3 × 2 则变成 32*,在计算的时候就把运算符前面两个数相乘就是要得到的结果,这就是后缀表达式。通俗的讲后缀表达式是在计算机运算符放置操作数的后面的转换,大概就是这个意思,但是他也有一定规则在里面。

我们先讲一下转换的一个规则,然后我们套用规则把他转换成后缀表达式,规则如下

1.遇到数字直接输出

2.遇到运算符直接入栈;有人可能就不有点听不太懂了,怎么扯上栈了呢,其实在转换过程中就是利用了堆栈,他内部创建了一个堆栈,用来存储运算符,根据优先级进行进栈出栈;我们看一下运算符都有哪些:()、× 、÷、 +、- 下面我们讲一下进栈出栈的规则

    (1).如果栈里面为空,那运算符直接入栈,如果栈里面有运算符,就跟栈顶的运算符比较谁的优先级高,如果比栈顶的优先级高就直接入栈,如果优先级高就直接出栈顶在入栈

      (2).如果遇到小括号就把栈中小括号包含的的运算符逐个出栈,小括号不输出,只输出运算符    

      (3).如果遇到优先级同级的也要入栈

下面我就套用上面的规则,转换后缀表达式的结果是:3 2 * 1 6 3 / / 7 - +

那计算机是怎么计算的呢:

第一步把3和2相乘的6之后输出为6;那第一步运算的结果为:6 1 6 3 / / 7 - +

第二部把6和3相除输出2,结果为:6 1 2 / 7 - +

第三步把1和2相除为0.5,结果为:6  0.5  7 - + 

第四步把0.5和7相减为-6.5,结果为:6  -6.5  +

第五步把6和-6.5相加,结果为:-0.5

那我们计算一下  3 × 2 +1 ÷ ( 6÷3) - 7 的结果就是 -0.5

注意每次计算是拿着运算符前面两个数进行运算,然后输出结果

到这里想必有人已经明白了计算机的是怎么计算的,但是有没有人有疑问,这个后缀表达式:3 2 * 1 6 3 / / 7 - +  是怎么得出来的,怎么回事这个样子呢,接下来我们就一步一步分析他是怎么得出来的结果,我画了一张图,里面详细介绍了每一步都转换过程

相关文章

  • 栈的经典案例,及后缀表达式的原理

    在程序开发中我们都是使用中缀表达式例如: 3× 2 +1÷ ( 6÷3) - 7 运算符都是在两个操作数的中间...

  • 计算器

    使用Java写的一个可以计算+,-,*,/ 的计算器。首先用栈把中缀表达式转化成后缀表达式,再利用栈对后缀表达式求...

  • 送外卖小公司OA

    中缀表达式转后缀表达式的方法: 遇到操作数:直接输出(添加到后缀表达式中) 栈为空时,遇到运算符,直接入栈 遇到左...

  • 数据结构与算法--后缀表达式

    中缀表达式转后缀表达式 中缀表达式转后缀表达式的思路步骤分析。 初始化一个栈和一个队列,运算符栈 S1 和存储中间...

  • 机试常用算法和题型-栈和队列专题

    堆栈+ordermap使用括号匹配 堆栈使用简单计算器 栈+队列实现中缀转后缀,计算后缀表达式 栈+队列计算,包括...

  • Python 简单计算器-逆波兰后缀表达式实现

    中缀表达式 后缀表达式 简易计算器,可以通过栈来实现。然而如果直接使用中缀表达式,需要处理括号,而使用后缀表达式则...

  • 【Python】(十)后缀表达式

    python实现栈的代码回顾 后缀表达式回顾 后缀表达式是计算机科学中的一种常见的数学表达式形式。相比于人类常用的...

  • 计算器专题

    0X00 基础知识 后缀表达式的计算 150. 逆波兰表达式求值 后缀表达式就是这么简单粗暴,碰到一个符号,就从栈...

  • day04-栈

    栈 解决实际问题: 表达式的求职和转换(中缀表达式转后缀表达式) 二叉树的遍历 深度优先搜索 概念: 栈(stac...

  • 中缀表达式转后缀表达式

    算法: 中缀表达式转后缀表达式的方法: 1.遇到操作数:直接输出(添加到后缀表达式中) 2.栈为空时,遇到运算符,...

网友评论

      本文标题:栈的经典案例,及后缀表达式的原理

      本文链接:https://www.haomeiwen.com/subject/airrjttx.html