数据结构之栈二(模拟计算器1补充)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

数据结构之栈二(模拟计算器1补充)

一、目的

上一次只能进行个位数的运算,这次实现多位数进行运算。
输入一个字符表达式,如:40+3*50-30,计算结果

二、具体思路

  1. 遍历字符串
  2. 定义两个栈,将运算符压入字符栈(charsta),数字压入数字栈(numsta)
    2.1 定义一个字符串(addval)用于拼接数字,因为每次只能得到一个字符,得到之后进行判断后一个字符是否还是数字,是的话就拼接,是运算符就直接将addval压入数字栈中
    2.2 运算符如果字符栈为空,直接进栈,如果不为空,和栈顶元素比较运算优先级,小于等于字符顶元素,则取出数字栈栈顶元素和次栈顶元素进行运算,再将该字符串压入字符栈中,运算结果压入数字栈中;如果该运算符运算优先级大于字符栈顶元素,直接入栈。
  3. 最后,判断字符栈中是否还有元素,没有了说明运算结束了,数字栈顶元素就是运算结果;若不为空,接着运算,数字栈顶和次顶元数运算,运算符为字符栈顶元素。最后输出数字栈顶元素就是运算结果了

三、代码

package demo.sjjg.stack;

public class jsq1 {
   
    public static void main(String[] args) {
   
//        String value="3*5-4+3";//计算3*5-4+3
//        String value = "40+30*50-30";//计算40+30*50-30
        String value = "40+3*50-30";//计算40+3*50-30
        //定义俩个栈,一个存字符,一个存数字
        ArrayStack2 charsta = new ArrayStack2(10);
        ArrayStack2 numsta = new ArrayStack2(10);
        int index = 0;
        char val;
        int num1;
        int num2;
        int res;
        String addval = "";
        while (true) {
   
            if (index == value.length()) {
   
                break;
            }
            val = value.substring(index, index + 1).charAt(0);
            if (charsta.isOper(val)) {
   
                if (charsta.isFool()) {
   
                    charsta.push(val);
                } else {
   
                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值