后缀表达式看完这一篇文章就理解了!
宝、⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
后缀表达式是栈的运用,如果你还不知道栈是什么,那请你先去看看关于栈的文章
文章目录
- 一、什么是后缀表达式
- 二、后缀表达式的运算顺序
- 三、中缀表达式
- 四、中缀表达式转化为后 缀表达式
一、什么是后缀表达式
后缀表达式是一种不需要括号的表达式。
对于四则运算,我们用括号来规定了它的运算顺序。
但是在早些年对于计算机,并没有括号来规定其运算顺序。
当没有了括号 比如想要输入 9+(3-1)x3+10/2 当没有了括号会怎么样呢,
总不能像这样:9+3-1x3+10/2 输入吧
那么伟大的科学家是怎么来解决四则运算顺序的呢?
20世纪50年代 波兰逻辑学家Jan Lukasiewicz 发明了一种没有括号的表达式(后缀表达式)
来解决这个问题,之所以叫后缀表达式 是因为所有的运算符号都要在数字后面出现才行;
二、后缀表达式的运算顺序
先给出一个后缀表达式吧如
四则表达式:9+(3-1)x3+10÷2
后缀表达式:9 3 1 - 3 x + 10 2 / +
相信你一定蒙圈了
我们先把四则表达式的结果算出来 我想想是多少呢
哦原来是20!(我太聪明了)
四则表达式显然不需要多bb
那后缀表达式是怎么算的呢
那显然就需要引用最开始说的栈了
因为后缀表表达式本来就是栈的一种应用
那么现在来说说后缀表达式的规则
先从左到右依次入栈
当是数字的时候直接入栈
当是运算符号的时候
就将栈的最上面两个数拿出进行运算 后 再将结果进栈 记住(栈顶元素永远在运算符号的右边)
那现在我们来算
后缀表达式:9 3 1 - 3 x + 10 2 ÷ +
第一步从左到右依次入栈 9 3 1
现在栈从上到下1 3 9 进入符号 - 将1和3 拿出 3-1 =2
栈顶元素永远在运算符号的右边
然后再把2进栈
现在栈从上到下是 2 9
再进入3
现在栈从上到下是 3 2 9
再运算符号 x 拿出 2x3 =6 再进栈
现在栈从上到下是 6 9
在运算+ 6+9=15
现在栈从上到下是 15
后缀表达式:9 3 1 - 3 x + 10 2 ÷ +
进入 10 2
现在栈从上到下是 2 10 15
运算 ÷ 10÷2=5 5 进栈
现在栈从上到下是 5 15
最后运算+ 15+5
得20
最后20出栈
(累了)
后缀表达式:9 3 1 - 3 x + 10 2 ÷ + =20
三、中缀表达式
啊??就是四则运算表达式 宝
四、中缀表达式转化为后缀表达式
相信看了前面的规则后,这个你应该也不难理解了
直接上规则:
9+(3-1)x3+10÷2
后缀表达式从左到右遍历,
1,是数字直接写上
2,是任何运算符号
①右括号----) 和优先级 不高于 栈顶元素 则 栈顶元素依次输出 并当前符号进栈(括号直接消失)
好吧我知道你又麻了
直接诉说好吧,
中缀表达式 9+(3-1)x3+10÷2
从左到右
9 写上
当前表达式为 9
+ 入栈(目前栈空,栈空就进栈)
( 入栈
目前栈里从上到下:( +
3写上
当前表达式为 9 3
- 入栈
目前栈里从上到下:-( +
中缀表达式 9+(3-1)x3+10÷2
1写上
当前表达式为 9 3 1
)右括号 遇到右括号 输出栈顶元素 并抵消左括号
写上 -
当前表达式为 9 3 1 -
当前栈从上到下 +
中缀表达式 9+(3-1)x3+10÷2
x 优先级高于+ 直接入栈
3写上
当前表达式 9 3 1 - 3
当前栈从上到下 x +
接下来 + 判断优先级 +优先级小于x x 出栈写上表达式
判断优先级 + 和+ 相同 属于 不高于 + 出栈 写上表达式 后面的+ 入栈
当前表达式 9 3 1 - 3 x +
再后面 10 写上表达式
÷ 判断优先级 高于+ 进栈
2 写上
当前表达式 9 3 1 - 3 x + 10 2
当前栈从上到下 ÷ +
由于已经没有符号和数字了
栈内依次出栈并写入表达式
最后得出 9 3 1 - 3 x + 10 2 ÷ +
总结
宝 你懂了没我纯文字描述真的很莽 (主要是我不会作图)以后会优化的,另外有错误一定要评论指出,我最怕 我一个人在这里乱bb 没人告诉我,我就淦了。另外这是参照大话数据结构写的。、大家要学数据结构建议买本书系统的学习
祝你越来越久,不要关注我(疯狂暗示)
爱你
后缀表达式看完这一篇文章就理解了!相关推荐
- Python常用基础语法知识点大全合集,看完这一篇文章就够了
介绍 Python 是一门独特的语言,快速浏览一下他的要点: 面向对象:每一个变量都是一个类,有其自己的属性(attribute)与方法(method). 语法块:用缩进(四个空格)而不是分号.花括号 ...
- 看完这个你还不理解右值引用和移动构造 你就可以来咬我(下)
共分三篇,这是第3篇.另外两篇,看完这个你还不理解右值引用和移动构造 你就可以来咬我(上),看完这个你还不理解右值引用和移动构造 你就可以来咬我(中). 下面是新标准下的其他特性(共十点),了解一下, ...
- 看完这个你还不理解右值引用和移动构造 你就可以来咬我(中)
共分三篇,这是第2篇.另外两篇,看完这个你还不理解右值引用和移动构造 你就可以来咬我(上),看完这个你还不理解右值引用和移动构造 你就可以来咬我(下). 看完上篇,应该对右值引用和移动构造有了总体上的 ...
- 看完这个你还不理解右值引用和移动构造 你就可以来咬我(上)
共分三篇,这是第一篇.另外两篇,看完这个你还不理解右值引用和移动构造 你就可以来咬我(中),看完这个你还不理解右值引用和移动构造 你就可以来咬我(下). C++ 右值引用 & 新特性 C++ ...
- 入门、复习微服务的同学看过来,一篇文章让你彻底搞懂微服务
废话不多说,各位先看下微服务的简介 微服务简介 微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务 ...
- 产品经理看过来,一篇文章说清楚MRD文档怎么写
什么是MRD? mrd是通过市场.用户.竞品.产品等一系列可行性分析,向运营.业务.产品等描述做什么样产品能够在市场上胜出的市场需求文档. 定义包含了mrd面对的人群是运营.业务.产品等业务线上的人, ...
- 一张图带你看完图论第一章(包含定义、定理、公式、推导证明和例题)
1.1 图的基本描述 几种特殊图 有限图 复合图 简单图(无环无重边) 完全图 Kn 边数最多的简单图 同构下 唯一 边数Cn2=n(n-1)/2 ...
- 001还在搞不清自动化测吗,看完这一篇文档带你深入剖析
1.什么是自动化 概念:由机器设备代替人工自动完成指定目标的过程 1.1优点 1.减少人工劳动 2.提高工作效率 3.产品规格统一标准 2.什么是自动化测试 概念:让程序代替人工验证系统功能的过程 2 ...
- 贝叶斯网络,看完这篇我终于理解了!
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨mantch@知乎 来源丨https://zhuanlan.z ...
最新文章
- strcmp函数和strcpy函数
- [SPOJ] 1043 Can you answer these queries I [GSS1]
- 数据结构与算法之递归题目
- 8.5 趣味游戏(2)
- django ajax 简书,Django_ajax
- JavaScript复习笔记(3)——数据类型(null、undefined、NaN)与深度克隆
- python运维案例开发_python运维开发之第六天
- 姚前:分布式账本与传统账本的异同及其现实意义
- 《赢在中国》第二赛季108将进京
- 应用计算机测线性电阻伏安特性曲线,伏安特性曲线
- 爬虫项目实操四、用Scrapy爬取招聘网站的招聘信息
- Android App赞赏功能,微信公众号赞赏功能升级:作者可直接收到赞赏, iOS安卓均可用...
- 1972:【15NOIP普及组】推销员
- 三年三个商业理论,你是否超越了?
- 关于 ORA-01012: not logged on
- 关于怎么测试网站页面打开速度?有什么工具能实现么?
- 数字IC后端需要学习什么?需要具备哪些技能?
- 手欠,给DELL R720加硬盘
- C#,ASP.NAT基于腾讯服务器实现自动发送邮件功能的几种方法及遇到的坑
- Window XP驱动开发(二) 环境搭建(VS2008+WDK+DDKWzard)及示例源码分析