中缀表达式转后缀表达式

这篇具有很好参考价值的文章主要介绍了中缀表达式转后缀表达式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 后缀式简介

  一种不需要括号的后缀表达法,也把它称为 逆波兰表示,是波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示表达式的方法。

2 由中缀表达式求后缀表达式示例(3种方法)

  中缀表达式指的是“9+(3-1)×3+8÷2”,这种就是我们通常见到的书写算式顺序,要计算中缀表达式则首先要将字符串转换为后缀表达式,即9 3 1 - 3 * + 8 2 / +,以下均是对于“9+(3-1)×3+8÷2”算式求解后缀表达式的方法。

2.1 方法一:栈的应用-四则运算表达式求值

2.1.1 栈的应用-四则运算表达式求值规则

  1.设定运算符栈;
  2.从左到右遍历中缀表达式的每个数字和运算符;
  3.若当前字符是数字,则直接输出成为后缀表达式的一部分;
  4.若当前字符为运算符,则判断其与栈顶运算符的优先级,若优先级大于栈顶运算符,则进栈;若优先级小于等于栈顶运算符,退出栈顶运算符成为后缀表达式的一部分,然后将当前运算符放入栈中;
  5.若当前字符为“(”,进栈;
  6.若当前字符为“)”,则从栈顶起,依次将栈中运算符出栈成为后缀表达式的一部分,直到碰到“(”。将栈中“(”出栈,不需要成为后缀表达式的一部分,然后继续扫描表达式直到最终输出后缀表达式为止。

2.1.2 栈的应用-四则运算表达式求值示例

  1、初始化一个空栈。此栈用来对运算符进出栈使用。如图2-1-2-1的左图所示。
  2、第一个字符是数字9,直接输出9(根据规则3),第二个字符是运算符“+”,则“+”进栈(根据规则4),如图2-1-2-1的右图所示。
中缀表达式转后缀表达式

图2-1-2-1
  3、第三个字符是符号“(”,则“(”进栈(根据规则5),如图2-1-2-2左图所示。

  4、第四个字符是数字3,直接输出3(根据规则3),总输出表达式为

    9 3

  第五个字符是运算符“-”,则“-”进栈(根据规则4),第六个字符是数字1,直接输出1(根据规则3),总输出表达式为

    9 3 1

  如图2-1-2-2右图所示。

中缀表达式转后缀表达式

图2-1-2-2
  5、第七个字符是符号“)”,此时依次将栈中运算符出栈成为后缀表达式的一部分,直到碰到"(",此时“(”上方只有“-”运算符,因此输出“-”运算符(根据规则6),总输出表达式为
    9 3 1 -

  如图2-1-2-3左图所示。

  6、第八个字符是运算符“ * ”,因为此时的栈顶符号是运算符“+”,优先级低于“ * ”,因此不输出,“ * ”进栈(根据规则4),如图2-1-2-3右图所示。

中缀表达式转后缀表达式

图2-1-2-3

  第九个字符是数字3,直接输出3(根据规则3),总输出表达式为

    9 3 1 - 3

  7、第十个符号是运算符“+”,此时栈顶符号是“*”,比“+”运算符的优先级高。因此栈中元素出栈并成为后缀表达式的一部分(没有比“+”运算符更低的优先级,所以全部出栈),总输出表达式为

    9 3 1 - 3 * +

  后把第十个符号“+”进栈(根据规则4)。
  之前输出成为后缀表达式的“+”是中缀表达式中“9 + ”的“+”,现在入栈的“+”是中缀表达式中“9 + (3 - 1) × 3 +”的“+”。如图2-1-2-4左图所示。

  8、第十一个符号是数字8,直接输出8(根据规则3),总输出表达式为

    9 3 1 - 3 * + 8

  第十二个符号是运算符“÷”,则“/”进栈(根据规则4),如图2-1-2-4右图所示。

中缀表达式转后缀表达式

图2-1-2-4
  9、第十三个字符也就是最后一个字符是数字2,直接输出2(根据规则3),总输出表达式为
    9 3 1 - 3 * + 8 2

  如图2-1-2-5左图所示。

  10、因为已经到了最后一个字符,所以将栈中符号全部出栈成为后缀表达式的一部分,最终输出表达式为

    9 3 1 - 3 * + 8 2 / +

  如图2-1-2-5右图所示。

中缀表达式转后缀表达式

图2-1-2-5
  整个过程,都充分利用了栈的后进先出特性来处理。

  ------以上过程参考《大话数据结构》中“栈的应用-四则运算表达式求值”内容。

2.2 方法二:二叉树应用

2.2.1 二叉树应用规则

  后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游,可记做左右根。后序遍历有递归算法和非递归算法两种。在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。
------粘百度百科

2.2.2 二叉树应用示例

  直接根据表达式转换画二叉树(画二叉树过程不在描述),如图2-2-2-1所示,之后进行后序遍历便可得到后缀表达式。
中缀表达式转后缀表达式

图2-2-2-1
  最后输出后缀表达式为:  
    9 3 1 - 3 * + 8 2 / +

2.3 方法三:加括号法

2.3.1 加括号法规则

  1、根据运算符的优先级对中缀表达式加括号(有几个运算符就有几对括号,原有的括号不用加)
  2、将运算符移到对应括号后面
  3、去掉所有括号,即为后缀表达式
  ------粘百度百科

2.3.2 加括号法示例

  中缀表达式为“9+(3-1)×3+8÷2”

    1、变为((9+((3-1)×3))+(8÷2)2、变为((9((31)-3)*)+(82)/+
    3、得到9 3 1 - 3 * + 8 2 / +

  最后输出后缀表达式为文章来源地址https://www.toymoban.com/news/detail-401400.html

    9 3 1 - 3 * + 8 2 / +

到了这里,关于中缀表达式转后缀表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 中缀表达式转后缀表达式,使用逆波兰计算。可以计算小数

    传递一个分开保存符号与数字的List即可:List SumNumber; 获取参数的构造方法如下: 要求的List保存数据的方式如下: 例如:1+2+3 然后使用 EvaluatePostfixExpressions 方法传递出一个保存好结果的String。

    2024年02月15日
    浏览(52)
  • Golang通过栈实现表达式运算(中缀表达式转后缀表达式解析语法)

    需求背景:将string表达式数组 [title == AUSU ( header == Wecome || brand != AC68U )] 解析并使用ES查询得到运算结果。 分析:带有括号的表达式,需要根据优先级解析,可将中缀表达式转换为后缀表达式,去除括号

    2024年02月14日
    浏览(50)
  • C++ 数据结构 栈 中缀表达式转后缀表达式并求值

    写在前面,这里用的是我自己写的Stack类,并非STL,实现方法为静态数组,但使用过程中的函数方法一样,无伤大雅。(完整code和Stack_static类赋在最后) 1.从左到右遍历 2.数,即参与运算数,直接放进后缀表达式之后 3.左括号 ,直接压入栈(因为括号的优先级最高,无需判断

    2024年02月03日
    浏览(49)
  • 中缀表达式转后缀表达式看完这一篇文章你就懂了

    一、什么是中缀表达式 二、什么是后缀表达式 三、后缀转中缀具体思路 四、代码实现 中缀表达式就是我们常用的算术表达方式,例如 (12+34)*5 ,运算符在两个数的中间,但是对于中缀表达式来说括号和加减乘除使得问题对于计算机非常复杂,为了有效的处理他们,波兰逻辑

    2024年02月08日
    浏览(51)
  • 【尚硅谷】数据结构和算法——前缀、中缀、后缀表达式规则

    跟着B站的尚硅谷学习数据结构与算法,语言为java,目前是第七个代码内容——前缀、中缀、后缀表达式 课程传送门:尚硅谷——前缀、中缀、后缀表达式 1)前缀表达式又称波兰式, 前缀表达式 的运算符位于操作符之前。 2)举例说明:(3+4)*5-6 对应的前缀表达式就是 - *

    2024年02月03日
    浏览(59)
  • 数据结构——前缀、中缀、后缀表达式实现和转换(Java)

    1.7.1 概念 它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于 运算符相对与操作数的位置 不同 前缀 表达式的运算符位于与其相关的 操作数之前 ;中缀和后缀同理。 平时我们 日常使用 并最为熟悉的就是中缀表达式。如: 1 + 2 *

    2024年02月05日
    浏览(55)
  • Java LeetCode篇-深入了解关于栈的经典解法(栈实现:中缀表达式转后缀)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍     文章目录         1.0 中缀表达式转后缀说明         1.1 实现中缀表达式转后缀思路         2.0 逆波兰表达式求值         2.1 实现逆波兰表达式求值思路         3.0 有效的括号         3.1 实现有

    2024年02月04日
    浏览(60)
  • 中缀表达式求值(栈的应用)

    AcWing算法基础课-3302.表达式求值 给定一个表达式,其中运算符仅包含 +,-,*,/ (加 减 乘 整除),可能包含括号,请你求出表达式的最终值。 注意: 数据保证给定的表达式合法。 题目保证符号 - 只作为减号出现,不会作为负号出现,例如, -1+2 , (2+2)*(-(1+1)+2) 之类表达式均不

    2024年02月05日
    浏览(54)
  • 数据结构 | 栈的中缀表达式求值

    目录 什么是栈? 栈的基本操作 入栈操作 出栈操作 取栈顶元素 中缀表达式求值 实现思路 具体代码 栈是一种线性数据结构,具有“先进后出”(Last In First Out, LIFO)的特点。它可以看作是一种受限的线性表,只能在表的一端进行插入和删除操作,这一端被称为栈顶,另一端

    2024年02月02日
    浏览(57)
  • 【数据结构】超详细讲解:算术表达式转化为后缀表达式、前缀表达式、表达式树的构建

    作者: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:算法、数据结构、Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: 【数据结构】:该专栏专注于数据结构知识,持续更新,每一篇内容优质,浅显易懂,不失深度! 近期目标: 写好专栏

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包