栈实现高级计算器的思路分享


1.建立两个栈:valueStack(数值栈)、operStack(运算符栈)

2.程序扫描表达式,当发现当前的这个字符是数字的时候,直接放入数值栈

3.如果发现字符是运算符

    3.1 如果运算符栈为空,就直接入栈

    3.2 如果运算符栈不为空,就判断

如果当前运算符的优先级小于等于

运算符栈栈顶的这个运算符的优先级,就计算,

并把计算结果放入数值栈,然后把当前运算符入栈

(运算符栈不为空,并且,当前运算符的运算级别小于运算符栈里运算符的优先级)

    3.3 如果运算符栈不为空,就判断

如果当前运算符的优先级大于于等于

运算符栈栈顶的这个运算符的优先级,就入栈

4.当扫描完毕后,就依次弹出数值栈和运算符栈的数据,并计算

    如果运算符栈不为空就一直计算,最终留在数值栈的值,就是运算结果


以上的逻辑已经实现了计算器的基本功能

但是还有bug

1.当数字是多位数的时候,计算出现错误了,原因是我们在将数字放入数值栈时,没有判断

它是否是多位数


你可能感兴趣的:(栈实现高级计算器的思路分享)