栈实现综合计算器(中缀表达式)

希望各位大佬指正 

需求:求解表达式3+2*60-2的值

思路分析:

1. 表达式是一个中缀表达式,关于什么事中缀表达式,请访问(前缀、中缀、后缀表达式_云乐仙er的博客-CSDN博客_前缀中缀后缀表达式前缀、中缀、后缀表达式_云乐仙er的博客-CSDN博客_前缀中缀后缀表达式前缀、中缀、后缀表达式_云乐仙er的博客-CSDN博客_前缀中缀后缀表达式);、

2.将表达式进行扫描,需要一些变量

int index = 0;//用于扫描
int num1 = 0;//存放数据
int num2 = 0;//存放数据
int oper = 0;//用于存放符号
int res = 0;//用于存放结果
char ch = ' ';//每次扫描得到的char保存到ch

3.需要两个栈,一个是numStack存储数字,另一个是operStack来存储符号。

//创建两个栈,数栈,符号栈
ArrayStack2 numStack = new ArrayStack2(10);
ArrayStack2 operStack = new ArrayStack2(10);

4.使用while(true)死循环扫描表达式,对每个字符进行判断

//依次得到expression的每一个字符
ch = expression.charAt(index);

        4.1如果取到的字符为运算符(+,-,*,/)

if (operStack.isOper(ch)) 

                 4.1.1 判断operStack是否为空,如果为空,直接将ch入符号栈operStack

if (operStack.isEmpty())
operStack.push(ch);

                4.1.2如果operStack不为空,判断现在的ch与operStack栈顶的运算符的优先级

                4.1.2.1如果现在的ch比operStack栈顶的运算符的优先级小或相等,就需要从numStack中pop出两个值、operStack中pop出一个值,进行运算。并将运算结果push到numStack,当前的ch加入到operStack中。

if (operStack.priority(ch) <= operStack.priority(operStack.peek())) {
    //从数栈中pop出两个数
    num1 = numStack.pop();
    num2 = numStack.pop();
    //从符号栈中pop出一个符号
    oper = operStack.pop();
    //进行运算,
    res = numS
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值