JAVA 数据结构-06 (2) 栈结构的应用 简易计算表达式的计算(中缀表达式)

JAVA 数据结构学习-06 栈

JAVA 数据结构-06 (1)栈的基本数据结构实现(数组实现,链表实现)
JAVA 数据结构-06 (3) 栈结构的应用 前 中 后缀三种表达式 中缀表达式转后缀表达式 逆波兰计算器实现和算法思路

2. 栈结构的应用(表达式与计算器)

2.1 简易计算表达式的计算(中缀表达式)

70*2*2-5+1-5-3+4

实现思路:

  • 设置2个栈结构,一个数栈numStack只用来保存数字;一个符号栈operStack只用来保存符号.
  • 通过一个index值来遍历我们的表达式;
  • 如果发现index值是一个数字,就直接入符号栈;
  • 如果发现扫描到一个符号:分为一下三种情况:
    • 如果符号栈为空,就直接入栈
    • 如果符号栈不为空且当前index扫描的操作符优先级小于或等于栈顶的操作符,就需要从数栈中pop出2个数据,从符号栈中pop出一个符号,执行二元运算(减法和除法需要注意谁减/除谁);将得到的结果入数栈,然后在将当前操作符压入符号栈中.
    • 如果符号栈不为空且当前index扫描的操作符优先级大于栈顶的操作符,就直接入栈.
  • 当表达式扫描完毕时,数栈中会存储表达式中的数字和优先级较高的运算中间量,符号栈中会存储优先级从栈顶开始递减的操作符;
  • 因此可用直接按符号栈的顺序进行计算,顺序的从符号栈中pop出一个操作符,从数栈中pop出2个数字,执行完运算后将运算结果压回数字栈;
  • 当操作符栈为空时,数栈中栈顶的数字就是最终运算结果.

准备栈结构:(java底层会将char转换为int,因此可以直接比较char和int)

​ 添加判断是否是 操作符, 优先级, 执行计算 三个方法

class ArrayStack {
   
    private int maxSize;
    private int stack[];
    private int top = -1;

    public ArrayStack(int maxSize) {
   
        this.maxSize = maxSize;
        this.stack = new int[maxSize];
    }

    public boolean isFull() {
   
        return top == maxSize - 1;
    }

    public boolean isEmpty() {
   
        return top == -1;
    }

    public int getTop(){
   
        if(isEmpty()){
   
            throw new RuntimeException("栈空");
        }
        return stack[top];
    }

    public void push(int data){
   
        if(isFull()){
   
            System.out.println("栈满,无法压入数据"<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值