栈和队列6|中缀表达式转换为后缀表达式 – 数据结构和算法28

来源:互联网 发布:淘宝店铺流量来源分析 编辑:程序博客网 时间:2024/05/21 06:17

栈和队列6:中缀表达式转换为后缀表达式

 

让编程改变世界

Change the world by program


 

课前谈一谈

 

今天我们课前谈一谈,要说点什么好呢?

最近小甲鱼发现,很多鱼油在学习数据结构和算法的时候积极性已经开始有点下降了。甚至很多朋友怀疑数据结构和算法到底有没有用?

实话说,在大厦的防震设计、消除疾病、防止水源枯竭这些实际问题中,很遗憾,数据结构和算法几乎起不到任何直接作用。。。。。。

 

那为什么我们要学呢?

很简单,它可以锻炼我们的“高级”思维!

 

何为“高级”思维?

这所谓的“高级”也是小甲鱼自己发明的,算法的重要性不用说大家都知道,一个程序,特别是大型程序,优秀的算法和架构跟一般的算法和架构效率差别是千万倍!

 

这就可以解释为什么国产的几大应用都在前几天相继投入血本进行重构。

这就跟建高楼大厦要打好根基是一个道理,很多人喜欢当“暴发户”,根基没打好就开始盖房,但盖到四五层的时候发现根基不稳,拆掉重盖!

 

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

 

小甲鱼上节课带大家编写了一个逆波兰计算器。

但是,我们人类确实是喜欢这样的表达式:(1-2)*(4+5)

而不是这样的:1 2 – 4 5 + *

所以,我们这节课的任务就是编写一个程序,将用户输入的中缀表达式转换为后缀表达式,而作为课后作业的延生,要求大家动手写一个中缀表达式计算器!

 

那么如何将“(1-2)*(4+5)”转化为“1 2 – 4 5 + *”呢?

其实很简单,利用栈的“记忆”吧,符号都推入栈即可。

我们大家很清楚我们将要进入看图识字环节了!

 

为了使得问题变得更加复杂,我们把假想敌设为:1+(2-3)*4+10/5

No pic you say a J8……

提示:备纸和笔随时记下输出内容!

 

首先遇到第一个输入是数字1,数字在后缀表达式中都是直接输出,接着是符号“+”,入栈:

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

 

第三个字符是“(”,依然是符号,入栈,接着是数字2,输出,然后是符号“-”,入栈:

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

接下来是数字3,输出,紧跟着是“)”,此时,我们需要去匹配栈里的“(”,然后再匹配前将栈顶数据依次出栈(这就好比括号里优先执行的道理):

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

 

紧接着是符号“*”,直接入栈:

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

 

遇到数字4,输出,之后是符号“+”,此时栈顶元素是符号“*”,按照先乘除后加减原理,此时栈顶的乘号优先级比即将入栈的加好要大,所以出栈。

栈中第二个元素是加好,按理来说大家平起平坐,但是按照先到先来后到吃屎的原则,栈里的加好呆得太久了,也要出栈透透气。(同理如果栈里还有其他操作符,也是出栈)

 

最后把刚刚吃屎的那个加好入栈,操作如下图:

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

 

紧接着数字10,输出,最后是符号“/”,进栈:

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

 

最后一个数字5,输出,所有的输入处理完毕,但是栈中仍然有数据,所以将栈中符号依次出栈。

有些东西看上去很难,但事实上做起来会更加的麻烦,就像这道题,小甲鱼要求大家务必经过自己的思考,再跟着小甲鱼来打代码,一定会有更大的收获!

 

总结规则:从左到右遍历中缀表达式的每个数字和符号,若是数字则直接输出,若是符号,则判断其与栈顶符号的优先级,是右括号或者优先级低于栈顶符号,则栈顶元素依次出栈并输出,直到遇到左括号或栈空才将吃屎的那个符号入栈。

转自:http://blog.fishc.com/2093.html
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 跑步的时候胸抖的疼怎么办 小区内安装了乒乓球桌扰民了怎么办 裁判出示红牌如果球员不走怎么办 高三文化课不好又没有特长怎么办 孩子做事磨蹭拖拉不讲效率怎么办 宝贝幼儿园哭的嗓子哑了怎么办 我给孩子转学学校不接收怎么办 眼睛被太阳晒了胀豉豉的怎么办 电脑电源灯亮着屏幕是黑的怎么办 刚办健身卡健身房跑路了怎么办 孕妇怀孕初期胖的太快怎么办 魔幻陀螺二的陀螺拆不动怎么办 我不干了小厂不给我发工资怎么办 货车司机把人撞成重伤没钱出怎么办 房主卖房定金收了不想卖怎么办 领导迟迟不给升职加薪机会怎么办 加工中心铣圆进出刀有接刀痕怎么办 烧茄子时炸茄子茄子太吸油怎么办? 梦金园黄金刚买了不给退怎么办 给同学抄作业被老师发现了怎么办 不准体罚和变相体罚后熊孩子怎么办 钢琴练的不好走不了专业怎么办 老师来信息说孩子学习退步了怎么办 老人磕着膝盖走路腿疼怎么办 腿膝盖一受凉就疼怎么办可以不疼 手臂和膝盖摔烂了好痛?怎么办 结扎一个月后坐太久腰酸怎么办 杠铃深蹲肩关节背不过去怎么办 QQ音乐在别的地方停不了歌怎么办 孕8周胎儿发育变慢怎么办 8个月宝宝肋张力高怎么办 术后5个月左手张力高怎么办 宝宝4个月体检四肢张力稍高怎么办 上腹绷紧大便酸臭酸臭的怎么办 小学生从双杠上摔下来会怎么办 去健身房碰到教练让你报私教怎么办 提踵把小腿练粗了怎么办 健身后两个小腿不一边粗怎么办 宿舍床上隔段时间有虫子怎么办 b2驾照实习证扣6分怎么办 健身房有个教练想撩我怎么办