神秘代码:5Lmd5biI5YWE5ZSv5LiA5Y6f5Yib5paH56ug77yM56aB5q2i6L2s6L29
1.概述
以前用antlr做过一个计算器:antlr4做一个计算器 本次打算从算法的角度使用栈实现计算器。
比如有这样一个字符串实现计算器:7*2*2-5+1-5+3-4
。
这里我们可以使用双栈来实现这个功能。我们现在有2个栈一个用来存放数据的,一个用来存放操作符的。
1.1 思路
使用栈完成表达式的计算思路
- 通过一个
index
值(素引),来遍历我们的表达式 - 如果我们发现是一个数字,就直接入数栈
- 如果发现扫描到是一个符号,就分如下情况
- 3.1 如果发现当前的符号栈为空,就直接入栈
- 3.2 如果符号栈有操作符,就进行比较
- 如果
当前的操作符的优先级小于或者等于栈中的操作符
,就需要从数栈中pop出两个数,在从符号栈中pop出一个符号,
- 如果