中缀表达式(中缀记法)

中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。

前缀表达式(前缀记法、波兰式)

前缀表达式是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操作数写在后面。为纪念其发明者波兰数学家Jan Lukasiewicz,前缀表达式也称为“波兰式”。例如,- 1 + 2 3,它等价于1-(2+3)。

后缀表达式(后缀记法、逆波兰式)

后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。

------------------前缀表达式、后缀表达式转换为中缀表达式的方法--------运算符前移或后移------------

这里我给出一个中缀表达式

1

a+b*c-(d+e)    //中缀表达式

  

第一步:按照运算符的优先级对所有的运算单位加括号

式子变成:((a+(b*c))-(d+e))
第二步:转换前缀与后缀表达式
        前缀:把运算符号移动到对应的括号前面
                则变成:-( +(a *(bc)) +(de))
                把括号去掉:-+a*bc+de  前缀式子出现
        后缀:把运算符号移动到对应的括号后面
                则变成:((a(bc)* )+ (de)+ )-
                把括号去掉:abc*+de+-    后缀式子出现

发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。

<------------------------------计算机如何计算前缀表达式或者后缀表达式------------------------>

虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。

我们来看一下,在计算机的角度来看,如何计算前缀或后缀表达式?

前缀表达式的计算机求值

前缀表达式,操作符在前边,也就是左边,所以计算机计算的时候会从右到左扫描表达式。

从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果

  • 例如:- × + 3 4 5 6

    1. 从右至左扫描,将6、5、4、3压入堆栈
    2. 遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈
    3. 接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈
    4. 最后是-运算符,计算出35-6的值,即29,由此得出最终结果

后缀表达式的计算机求值

与前缀表达式类似,只是顺序是从左至右:

从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

例如后缀表达式“3 4 + 5 × 6 -”:

  1. 从左至右扫描,将3和4压入堆栈;
  2. 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;
  3. 将5入栈;
  4. 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;
  5. 将6入栈;
  6. 最后是-运算符,计算出35-6的值,即29,由此得出最终结果。

---------------------------结束------------谢谢,欢迎提出宝贵意见---------------------------

(数据结构)前缀,后缀以及中缀表达式相关推荐

  1. 255.0.0.0子网掩码相应的cidr前缀表示法是?_六十四、前缀,后缀,中缀表达式转化求值问题...

    「@Author:Runsen」 ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. 「---- Runsen」 ❞ 算法,一门既不容易入门,也不容易精通的学问. 上次介 ...

  2. 六十四、前缀,后缀,中缀表达式转化求值问题

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 算法,一门既不容易入门,也不容易精通的学问. 上次介绍如何利用栈实现 ...

  3. 数据结构前缀,后缀,中缀表达式

    [cpp] view plain copy   [cpp] view plain copy   <span style="color: rgb(51, 51, 51); font-fa ...

  4. [数据结构考前必看]中缀表达式转化成后缀表达式_例题超多+分步骤讲解+带你手算

    中缀.后缀表达式定义 中缀表达式又称波兰式,有利于人们阅读与表达. 后缀表达式又称逆波兰式,有利于机器进行运算. 例题1: 中缀表达式:(a+b+c*d) /e 首先让我们来看一下运算符对应的优先级, ...

  5. 【数据结构与算法】中缀表达式 - 后缀表达式 - 求值

    中缀转后缀 #include <stdio.h> #include <stdlib.h>#define STACK_INIT_SIZE 20 #define STACKINCR ...

  6. 数据结构作业--计算器(用中缀表达式实现表达式树)

    Tree.h #ifndef TREE_H_INCLUDED #define TREE_H_INCLUDED #include <iostream> #include "stdl ...

  7. 后缀转中缀表达式_中缀转后缀表达式代码实现(下)及计算器完整版

    南故笙烟:中缀表达式转为后缀表达式​zhuanlan.zhihu.com 思路分析 1.初始化两个栈:运算符栈s1和储存中间结果的栈s2 2.从左至右扫描中缀表达式 3.遇到操作数时,将其压入s2 4 ...

  8. python中缀转后缀_中缀表达式转后缀表达式Python

    中缀表达式转后缀表达式参考的文章就是直接给出了算法,但是算法如何推导出来的还没有弄明白,简单记录下我自己的理解,强行解释一下. 后缀表达式就是操作符再操作数的后面,并且计算机能够根据简单的优先级就能进 ...

  9. 后缀表达式转中缀表达式

    中缀转后缀:中缀表达式转换为后缀表达式 大概意思就是:遇到数字就输出,遇到符号(包括括号)就压入栈,如果当前符号优先级比栈顶的低,就把栈顶的符号输出,平级的也都输出,到左括号(优先级最高为止),然后当 ...

最新文章

  1. arrays must all be same length
  2. 33、springboot整合springcloud
  3. Spring 极速集成注解 Redis 实践
  4. 多线程编程:阻塞、并发队列的使用总结
  5. Java原子类中CAS的底层实现,java高级面试笔试题
  6. java 浮点型 除零_Java-非零整数除以10等于0.0浮点?
  7. 数据库系统原理笔记:关系数据库设计
  8. 分布式微服务云架构电子商务平台
  9. MATLAB 2017 b 安装+下载+破解(win10,linux,mac)
  10. 个性化的CRM具备的功能有哪些
  11. VMWare虚拟机开启失败(模块“Disk“启动失败)
  12. Linux系统中一些目录和文件的详细解释(参照RHEL5.4)
  13. 08 python 集合
  14. 集合及集合的交,并与差
  15. 关于许嵩很有意境的歌词
  16. 项目经理如何提升核心竞争力,给自己增值
  17. python微博评论情感分析_基于Python的微博情感分析系统设计
  18. 中国大学moocpython_中国大学MOOC(慕课)_Python 语言程序设计_测试题及答案
  19. 精读《极客公园 IFX - 上》
  20. 教你如何秒杀12306,JAVA程序抢票成功 分享 附截图

热门文章

  1. android 编译之后黑屏_抖音BoostMultiDex:Android低版本上首次启动时间减少80%(一)...
  2. Cookie会话技术
  3. 简练软考知识点整理-控制成本过程
  4. Codeforces Round #441 D. Sorting the Coins(模拟)
  5. Python文件操作-文件的增删改查
  6. PHP图形图像的典型应用 --常用图像的应用(验证码)
  7. xml学习4-dtd
  8. 计算机java考试_2017年计算机java考试试题
  9. java system.setproperties_在JAVA中 System.getProperty 和 System.setProperty 方法.
  10. 回调函数 —— 借助中间通用函数(形参里有函数指针,实现函数注册)调用不同的回调函数 (多态/分层)