我们一般人书写一个表达式,例如:2*3+6-5/9,这种书写被称之为中缀表达式,但在计算机中则不是用中缀表达式的,往往使用的是后缀表达式,后缀表达式更符合计算机的特性,所以效率也就会比中缀表达式的效率高很多,我们今天就来说一说,怎么把中缀表达式转换成后缀表达式。
我们先给出一个例题供大家来参考:
X=A+B*(C-D)/E

说到后缀表达式就得从入栈出栈开始说起,当数据全部写入到栈(数组)之后,当碰到一个运算符的时候,若碰到比这个运算符优先级更低得运算符的时候,先让那些优先级低得运算符出栈,然后让这个优先级最高的运算符入栈,以此类推,直到运算符全部正确入栈。
碰到此类题目,最好的办法就是根据优先级加括号,接下来由我演示一下:
解:1.先一层一层的加括号X=(A +( (B*(C-D))/E))
然后就是从最里面开始往外面去括号,括号的意思是:左括号表示入栈,右括号表示出栈。去掉括号后数据向左靠齐,所以第一次去掉括号之后式子就是:X=(A+((B*(CD-))/E)),继续,X=(A+((BCD-*)/E));刚才数据都是在括号左边,所以都是向左靠齐,接下来的E在括号右边,去掉括号之后应加在原式的后面,X=(A+(BCD-*E/)),一样的,继续X=(ABCD-*E/+),最后把等号也变过来,式子的最终结果也就是XABCD-*E/+=,也就得到了我们的后缀表达式。看完之后是不是有一种茅塞顿开的感觉呢?利用这种办法,既快速又准确,如果觉得刚才的题目过于简单,接下来这一道会稍微难一点,式子也会稍微长一些,但还是用刚才所说的技巧,万变不离其宗。请往下面看:
a+b*c+(d*e+f)*g

解题思路:第一步还是老规矩,加括号,只是这次的括号有些多,千万别加错了哦。(a+(b*c)+(((d*e)+f)*g))
这次就不再那么详细的讲了,都是同样的套路,(a+b*c+(de*f+g*))—–>(abc*+de*f+g*+ ),不过这次一定要仔细,加法是从左到右依次执行的,先变换后面的乘法,变换完了之后3个直接相加,再一变换就变成了我们想要的结果。

关于后缀表达式的转换相关推荐

  1. 天勤数据结构:前缀、中缀、后缀表达式的转换与计算

    第三章 栈和队列 1. 输出队列问题 2. 表达式的转换 - 手工转换 2.1 中缀表达式 转 前缀表达式 2.2 中缀表达式 转 后缀表达式 2.3 后缀表达式 转 中缀表达式 2.4 后缀表达式 ...

  2. 数据结构学习笔记——前、中、后缀表达式的转换(栈的应用)

    目录 一.前.中.后缀表达式定义 二.具体转换步骤 (一)中缀表达式转换为前缀表达式 (二)中缀表达式转换为后缀表达式 例题 一.前.中.后缀表达式定义 一般我们常用的中缀表达式,中缀表达式不仅依靠运 ...

  3. 中缀和后缀表达式的转换

    可以用中缀式(a+b+c)*d-e来实际分析一下 1.中缀转后缀: 来源:百度百科 1)设定一个符号栈,并把符号'#'压入栈中,并规定#的优先级最低 2)从左往右扫描表达式,如果是字母就直接发送给后缀 ...

  4. 中缀表达式转后缀表达式【转换步骤】

    中缀表达式转后缀表达式思路步骤分析 一.初始化两个栈: 运算符栈symbolStack 和 存储中间结果的栈 resultStack; 二.从左到右扫描中缀表达式: 三.遇到操作数时,将其压入到 re ...

  5. 利用栈完成中缀表达式到后缀表达式的转换

    From王道数据结构

  6. 前、中、后缀表达式概述及转换+栈的计算器原理及代码分析(含完整源码)

    目录: 1.前中后缀表达式的概述 2.中序表达式转前后缀表达式 3.运用栈的后缀表达式实现计算器原理步骤 4.代码实现和分析 1.前中后缀表达式的概述及相互转换 前缀表达式:运算符位于操作数之前. 中 ...

  7. 【中缀、后缀表达式(整数)的介绍、转换及运算】

    中缀.后缀表达式(整数)的介绍.转换及运算 一.简介 二.中缀表达式转后缀表达式 三.中缀表达式转后缀表达式代码实现 四.中缀表达式计算机求值代码实现 1.首先创建一个栈类 2.测试执行 五.后缀表达 ...

  8. 前缀 中缀 后缀表达式2

    对于未经训练的用户来说,计算机科学领域中数学表达式求值的传统方法即不顺手又难以使用:软件工程师 Nikola.Stepan 旨在改变这些传统方法.他的 applet W3Eval 对表达式求值与您用纸 ...

  9. 前缀、中缀、后缀表达式 快速计算方法

    中缀表达式(中缀记法) 前缀表达式(前缀记法.波兰式) 前缀表达式的运算符位于操作数之前. 从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算( ...

最新文章

  1. 在linux上配置JDK环境变量
  2. 对时域连续信号用matlab离散,数字信号处理上机实验一 离散时间信号的时域分析...
  3. 你的项目应该如何正确分层?
  4. 去除cpp中注释的小程序
  5. iframe 自适应高度 跨域
  6. python绘制如下图形、小三角形边长20_python二级操作题与分析(7)
  7. promise原理—一步一步实现一个promise
  8. Tomcat 8默认工具manager管理页面访问配置
  9. 10 个用于网络管理员进行高级扫描的端口扫描工具
  10. LINUX下运行.sh文件出现Syntax error: end of file unexpected (expecting “then”)最方便解决方法
  11. win7开机密码_win7忘记开机密码怎样才能打开电脑?别再用那些错误的方法了
  12. Visual Studio 解决方案提示不兼容,该应用程序未安装
  13. 趣图:五彩斑斓的黑,找到了
  14. 安装Tomcat步骤
  15. 函数模板的特例化(专用化)以及类型含有const的特殊情况
  16. SpringBoot:运行项目是报错org.apache.ibatis.builder.IncompleteElementException:
  17. STM32 USB组合设备HID+MIDI
  18. 3dmax卡顿、卡死 怎么解决?
  19. ARM+FPGA运动控制卡 运动控制卡方案 运动控制卡方案 运动控制卡
  20. 我有一个梦想--读《致员工的一封信》有感(转)

热门文章

  1. vue3.0移动端 ui_vue.js的移动UI元素
  2. python中wheel什么意思_某个wheel(.whl)包的依赖关系是什么?
  3. JavaScript 值得一读的书籍
  4. IP 地址冲突检测程序源码(解决某种情况下检测无效的问题)
  5. 信息学奥赛一本通(c++):2066:【例2.3】买图书
  6. 最新码支付源码+完整版+免挂监听回调+微信、支付宝、qq监控APP打包教程
  7. CS224N Assignment 1: Exploring Word Vectors (25 Points)
  8. mysql修改系统日期_修改系统和MySQL时区
  9. 水文计算机国外ei期刊,水文水利类相关SCI、EI期刊(包括SCI分区)
  10. 用python批量下载网络图片_使用python批量下载图片吗?怎么做?