利用栈结构实现四则运算的巧妙方法

描述

上个视频写了个简易计算器,算个简单的加减乘除还行,但是如果来个混合运算,或者加个括号,这几行代码就差的太多了。

处理这种混合运算,不得不提到数据结构中的栈。

我们平时写的这种表达式,叫做中缀表达式,非常符合人的正常思维,但是计算机计算的话不方便。

中缀表达式可以转换成后缀表达式,这种表达式看起来抽象一些,但是不需要括号或者优先级,计算机计算的话比较方便。

整个过程有点复杂,分的情况比较多,就以这个表达式为例。

首先是把中缀表达式转换成后缀表达式,需要用到一个栈,来存放运算符。

开始遍历字符串。

遇到数字,直接写下来。后面是加号,如果此时栈是空栈,符号直接进栈;再往后,左括号,左括号直接进栈;数字 1 直接写下来;再往后是加号,如果栈顶是左括号,加号直接进栈;1 写下来;后面是右括号,右括号不用进栈,此时让加号出栈;左右括号遇到一起,可以让左括号出栈,两个括号直接丢掉就行;后面遇到乘号,因为乘号优先级比加号高,乘号直接进栈;2 写下来;遇到减号,因为减号的优先级不高于乘号,所以乘号出栈;减号的优先级同样不高于加号,加号出栈;此时栈变成空栈,减号入栈;最后把 1 写下来;表达式遍历结束,减号出栈。

这个表达式就是后缀表达式。

计算后缀表达式也需要一个栈,方法就是,遇到数字进栈,遇到运算符就出来两个数字,运算后把结果进栈。

前面的 2 1 1 分别进栈;遇到加号,1 和 1 出栈,计算得到 2 再进栈;2 进栈;遇到乘号,2 和 2 出栈计算得到 4,4进栈;遇到加号,4 和 2 出栈,计算得到 6,6 进栈;数字 1 进栈;最后是减号,1 出栈,6 出栈,用后出栈的减去先出栈的,结果是 5,5进栈。

最后留在栈里面的就是结果。

这个过程很复杂,写代码之前需要对各种情况分类。

这里直接贴出代码,如果有需要,评论区留言代码,我私信发你。

代码写出来后简单的测试了几个,没什么问题,如果大家在使用中有什么问题,欢迎来交流。
 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分