热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

中缀表达式转换为后缀表达式、前缀表达式

写在前边的话:你的支持是我写作的动力,有帮助到你的话麻烦点赞加收藏呦。感激不尽!如有错误也请留言指正别用移动括号的方法了,画

 写在前边的话:你的支持是我写作的动力,有帮助到你的话麻烦点赞收藏呦。感激不尽!如有错误也请留言指正


别用移动括号的方法了,画树它不香么

中缀表达式转换为后缀表达式可以分为两种方法,一种是利用栈(后文有视频和文字讲解),另一种是画树。题目中没有要求的话,最好不要用栈。强烈推荐画树法。

换出来树,前缀表达式,后缀表达式只需要根据前序遍历和后续遍历即可得到,方便的很



目录

一、画树法

二、利用栈




例题:将中缀表达式a+b-a*((c+d)/e-f)+g转换为等价的后缀表达式ab+acd+e/f-*-g+。【2012年全国试卷试题2 一部分】



一、画树法

画树法是将表达式按照 “+-” 分为几个部分,将 a+b-a*((c+d)/e-f)+g 划分后  a  +   b   -   a*((c+d)/e-f)   +  g,从后向前,以第一个 “+-” 号为根,左边作为左子树,右边作为右子树。

 此时,左子树仍然是一个表达式,继续按照上述规则拆分,画树

 对于绿色子树,继续按照规则划分子树。对于黄色子树,最外层没有 “+-” 号,按照 “*/” 号划分子树,把括号包起来的当做一个整体

 对蓝色子树继续按照规则划分

对橙色子树继续划分

 对最后生成的树进行后续遍历,即可得到后缀表达式 ab+acd+e/f-*-g+

 对最后生成的树进行前序遍历,即可得到前缀表达式+-+ab*a-/+cdefg




二、利用栈

利用栈就是从左向右遍历表达式 a+b-a*((c+d)/e-f)+g,


  • 字母直接输出
  • 栈空直接入栈,“*/”直接入栈
  • 遍历时遇到运算符号 “+-” 需要退栈,退到栈中遇到 “+-”停止,将栈中的“+-”输出,然后自己入栈。或者 “(” 停止,将自己入栈。
  • 遍历时遇到 “)” 也需要退栈,退到遇到 “(” 停止,将左括号弹出栈。

表达式输出
a +b-a*((c+d)/e-f)+g a
a + b-a*((c+d)/e-f)+g+            
a+ b -a*((c+d)/e-f)+g a b
a+b - a*((c+d)/e-f)+g-a b +
a+b- a *((c+d)/e-f)+g a b + a
a+b-a * ((c+d)/e-f)+g-* 
a+b-a* ( (c+d)/e-f)+g-*( 
a+b-a*( ( c+d)/e-f)+g-*(( 
a+b-a*(( c +d)/e-f)+g a b + a c
a+b-a*((c + d)/e-f)+g-*((+ 
a+b-a*((c+ d )/e-f)+g a b + a c d
a+b-a*((c+d ) /e-f)+g-*(a b + a c d +
a+b-a*((c+d) / e-f)+g-*(/ 
a+b-a*((c+d)/ e -f)+g a b + a c d + e
a+b-a*((c+d)/e - f)+g-*(-a b + a c d + e /
a+b-a*((c+d)/e- f )+g a b + a c d + e / f -
a+b-a*((c+d)/e-f ) +g-* 
a+b-a*((c+d)/e-f) + g+a b + a c d + e / f - * -
a+b-a*((c+d)/e-f)+ g a b + a c d + e / f - * - g

将栈依次弹出,即可获得后缀表达式:ab+acd+e/f-*-g+

附一个此题过程的视频,B站链接https://www.bilibili.com/video/BV1pZ4y1g7Qs/


利用栈将中表达式转换为后缀表达式


 


推荐阅读
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 最近学习反射机制的时候Properties.load(读取本地文件流的时候怎么也找不到加载文件后面发现IDEA的默认根目录是在它的Project工程下IDEA的文件目录和Ec ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文讨论了如何在不使用SearchBar display controller的情况下,单独使用SearchBar并捕获其textChange事件。作者介绍了实际状况,即左侧SliderMenu中的SearchBar需要在主页TableView中显示搜索结果。然后,作者提供了解决方案和步骤,帮助读者实现这一功能。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
author-avatar
非船_725
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有