中缀表达式转后缀表达式
中缀表达式转后缀表达式
- 1 后缀式简介
- 2 由中缀表达式求后缀表达式示例(3种方法)
- 2.1 方法一:栈的应用-四则运算表达式求值
- 2.1.1 栈的应用-四则运算表达式求值规则
- 2.1.2 栈的应用-四则运算表达式求值示例
- 2.2 方法二:二叉树应用
- 2.2.1 二叉树应用规则
- 2.2.2 二叉树应用示例
- 2.3 方法三:加括号法
- 2.3.1 加括号法规则
- 2.3.2 加括号法示例
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 / +
最后输出后缀表达式为
9 3 1 - 3 * + 8 2 / +
中缀表达式转后缀表达式相关推荐
- java中缀表达式转后缀表达式(逆波兰算法)
四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式 数字直接输出为后缀表达式一部分 如果是符号,则判断与栈顶元素的优先级 高于栈顶元素优先级直接入栈 低于或等 ...
- java中缀表达式转后缀表达式_数据结构Java实现06----中缀表达式转换为后缀表达式...
本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...
- 数据结构实验——中缀表达式转为后缀表达式
一.实验内容: 编写程序,实现中缀表达式化为后缀式输出. 已知中缀表达式中操作数全部用小写英文字母表示,运算符只含有+, -, *, /四种,定界符只有( )以及结束符#. 二.程序源代码: 运行示例 ...
- 九、中缀表达式转为后缀表达式
使用栈将中缀表达式转为后缀表达式并计算 一.中缀表达式转换为后缀表达式 由于后缀表达式适合计算式进行计算,但是人对于较长的中缀表达式,很难将中缀表达式直接转换为后缀表达式,于是我们使用栈来实现中缀表达 ...
- 数据结构——栈——中缀表达式和后缀表达式
什么是中缀表达式,什么是后缀表达式 我们一般看见的多项式计算都是中缀表达式构成的:1+2*3+4/3 类似这种,为什么说是中缀呢?因为它的计算符号都是在两个数中间的. 那么自然而然的明白了后缀表达式是 ...
- 前缀、中缀和后缀表达式详解,中缀表达式到后缀表达式的转换规则,以及后缀表达式的计算规则,附计算代码
1. 中缀.前缀和后缀表达式 1.1 中缀表达式 首先,中缀表达式的这个"缀"指运算符在两个操作数的位置.中缀表达式其实就是我们常用的算术表达式,比如 2 + 9 - (32 * ...
- 【Weiss】【第03章】练习3.20:中缀表达式转后缀表达式
[练习3.20] a.编写一个程序将中缀表达式转换为后缀表达式,该中缀表达式含括号及四则运算. b.把幂操作符添加到你的指令系统中去. c.编写一个程序将后缀表达式转化为中缀表达式. Answer: ...
- 学习日志-中缀表达式转后缀表达式并计算结果
将中缀表达式转换为后缀表达式: (1)当读到数字直接送至输出队列中: (2)当读到运算符t时: a.将栈中所有优先级高于或等于t的运算符弹出,送到输出队列中: 这句话不好理解,可以说成这样,从栈顶开始 ...
- 数据结构中缀表达式转后缀表达式与后缀表达式的求值实训报告_动图+源码,演示 Java 中常用数据结构执行过程及原理...
程序员的成长之路互联网/程序员/成长/职场 关注 阅读本文大概需要 3.7 分钟. 作者:大道方圆cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, ...
- 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)
// 后缀表达式转中缀表达式,同时求值,O(n)// 数值栈 vector<int> nums; // 运算符栈 vector<char> ops;// 优先级 int gra ...
最新文章
- 关于jQuery Mobile 的pageinit,pageshow,以及data-ajax
- 【数据库】-基本特性
- 设计模式(10)-----模板方法模式
- python评估不平衡数据集_Python Pandas:平衡不平衡的数据集(用于面板分析)
- 云免流控服务器响应失败,云免流服务器是否违法
- Jboss 安装配置
- JSON 之 SuperObject(8): 关于乱码的几种情况 - 向 Henri Gourvest 大师报告
- 手把手教你Tiny4412 Android5.0 定制 按下开发板上的按键通过广播发送到应用层
- 排队论的计算机模拟,系统容量有限的一类排队论模型的计算机模拟研究
- 遇到数学问题《深度学习》“花书”读不下去了吗?给你支个招
- 处于停机等非正常状态_汽轮机运行最重要的启动与停机阶段,你得了解这些实际经验...
- 2021年10月世界编程语言排行
- Linux服务器重启后crs,Linux服务器重启后crs_stat -t 命令无法正常使用以及解决思路...
- Windos系统使用webdav协议将阿里云盘挂载在本地,并实现Notability等支持webdav协议软件的自动备份
- vue基于canvas 涂鸦和文字编辑
- 原 Android自定义控件三部曲文章索引
- sklearn 中 pca.components_
- iphone11的计算机在哪,iPhone11怎么连接电脑?iPhone11信任并连接电脑图文教程
- HBase、Kudu 和 ClickHouse 全视角对比
- run命令 uboot_华为光猫HG8245H救砖笔记⑥逆向UBoot恢复海思命令行
热门文章
- addEventListener:为单个事件注册多个事件事件处理程序
- Semantic Role Labeling (SRL)
- 图解sql内外连接和左连接left join和右连接right join
- layui 点击头像 上传头像
- r语言聚类分析_R语言实现tSNE聚类分析
- qt调用python(不是python调用qt,不是使用pyqt模块)
- 视频app scheme参数和app name
- CSDN下载频道于2014年7月17日改版,23日-24日系统维护
- 冰点文库下载器Fish-v327-0221
- 单片机音频谱曲软件_51单片机蜂鸣器音乐简谱转换工具