Dijkstra双栈算术表达式计算器

本文介绍了Dijkstra双栈算法用于解决算术表达式求值的问题,详细阐述了算法步骤,并指出其仅能处理简单表达式(如(a+b))的局限性,同时引发对字符串解析和程序本质的思考,联系到HTTP请求处理流程,强调程序的普遍存在。
摘要由CSDN通过智能技术生成

一、一个简单的算术表达式(8*(7-2))

给出一个算术表达式“(8*(7-2))”,我们很快可以口算出来结果是40。如果把这条式子扔给java计算,结果如何?如果不对这条表达式作任何处理,java或者其他计算机语言都只是把它当做是一个简单的字符串,java不会像人那样认识加减乘除、括号内优先计算等操作,如果真要编程语言算出人类的算术表达式的结果,只能去解析这个表达式,把它解析成编程语言自己能读懂的方式然后去计算结果。

二、Dijkstra双栈算术表达式求值
这个问题很久以前就有个解决方案:Dijkstra双栈算术表达式求值。顾名思义,双栈就是两个栈(stack),用两个栈来实现算术表达式的值。
这个算法有如下几个步骤:
1、建立两个栈:操作符栈(opt)、操作数栈(values);
2、将给出的表达式从左到右逐个字符扫描,遇到左括号则忽略;
3、遇到“加减乘除”则压入opt,否则压入values;
4、遇到右括号,opt、values分别弹出一个元素;
5、再从values弹出,与第四步中弹出的操作数和操作符做运算;
6、把第五步的运算结果压入values;
7、循环以上步骤直到表达式结尾;
8、输出最后计算结果。
可以发现,每次经过第5步后values里只剩下一个操作数,这个操作数就是一个“()”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值