数据结构之栈对逆BoLand表达式的计算

Posted jiushixihuandaqingtian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之栈对逆BoLand表达式的计算相关的知识,希望对你有一定的参考价值。

后缀表达式:运算符位于操作符之后,计算机对该式是从做到右进行计算,计算过程如下例子

技术图片

本章给出的是逆波兰表达式(后缀表达式)的计算Demo,为了便于计算,在给出的后缀表达式中加入了空格,并且使用list集合进行遍历,至于中缀怎么转变成后缀,后面文章

会给出案例.

代码如下:

package com.ebiz.stack;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/**
 * @author YHj
 * @create 2019-07-24 14:17
 * 逆波兰表达式,实现计算器
 */
public class NiPoLandCalculator 

    public static void main(String[] args) 
        //定义一个逆波兰表达式(后缀表达式)  (30+4)*5-6 => 30 4+5*6-
        //为了方便,数字以及运算符之间用空格隔开
        String expression="30 4 + 5 * 6 - ";

        List<String> list = getList(expression);

        int resul=getResult(list);
        System.out.println("resul = " + resul);

    

    //输出计算结果
    private static int getResult(List<String> list) 
        Stack<String> stack = new Stack<>();
        for (String s : list) 
            //匹配数字,可匹配多位数
            if (s.matches("\\\\d+"))
                stack.push(s);
            else 
                int num01=Integer.parseInt(stack.pop());
                int num02=Integer.parseInt(stack.pop());
                int result=0;
                if (s.equals("+"))
                    result=num01+num02;
                else if (s.equals("-"))
                    result=num02-num01;
                else if (s.equals("*"))
                    result=num02*num01;
                else if (s.equals("/"))
                    result=num02/num01;
                else 
                    throw new RuntimeException("无法解析的字符串");
                
                stack.push(""+result);
            
        
        return Integer.parseInt(stack.pop());
    

    //将表达式的值以空格进行拆分,加入到arraylist中,便于操作(不适用索引)
    private static List<String> getList(String str) 
        String[] split = str.split(" ");
        ArrayList<String> list = new ArrayList<>();
        for (String s : split) 
            list.add(s);
        
        return list;
    


 

以上是关于数据结构之栈对逆BoLand表达式的计算的主要内容,如果未能解决你的问题,请参考以下文章

数据结构----栈与队列之栈的应用四则运算表达式求值

数据结构实验之栈与队列二:一般算术表达式转换成后缀式

数据结构之栈的应用:中缀表达式求值

JAVA数据结构与算法之栈~ 中缀表达式转换为后缀表达式

数据结构之栈

将中缀表达式转换为后缀表达式,然后利用栈对表达式求值。