数据结构之栈对逆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表达式的计算的主要内容,如果未能解决你的问题,请参考以下文章