四则运算式解析思路

常年写业务代码的我遇到了四则运算,只要我不尴尬,尴尬的就不是我。这里还是记录一下四则运算思路吧,希望在以后工作生活中有用。四则运算在面试中其实也经常会遇到,经常刷LeetCode的应该不会陌生。其实在有一次面试中遇到了类似的问题,当时是计算一个公式中最大的嵌套层数,就是最大的有效的括号的层数。这里就不放什么启发的思路了,直接上步骤。

1.定义两个栈,栈A用于存数据,栈B用于存运算符

2.运算符优先级,+-*/(), 优先级从左到右依次变高,先计算优先级高的;

  • 但是在这里优先级这样定义方便计算 “)(+-*/”,
  • 这里左右括号其实会特殊处理,并没有完全按照正常优先级定义
  • 只要遇到左括号就直接进入符号栈B
  • 一旦遇到右括号,必须取出栈B顶的符号进行计算,直到取出左括号
  • 这样做的好处是最后的符号栈B里就是优先级从低到高排好顺序的运算符了,不用考虑括号嵌套的问题了

3.依次从运算式中取数据和符号,数据直接进入栈A,符号则与栈B顶的符号记性优先级比较,高就直接入栈;

4.反之,就从栈B弹出栈顶符号,同时从栈A弹出两个数据进行计算,将计算结果存入栈A;

5.如果优先级还是低于栈B顶的符号,就继续步骤4,反之就将结果直接存入栈A;

6.当运算式遍历完后,则依次从栈B顶取运算符,从栈A顶取数据进行计算,直到栈A和栈B为空;

 

代码后续再贴上来

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值