package org.structure.stack;
import java.util.ArrayList;
import java.util.Stack;
/**
* 逆波兰表达式 运算
* @author cjj_1
* @date 2020-08-07 13:59
*/
public class PolandNotation {
public static void main(String[] args) {
String suffixExpression = "3 4 + 5 * 6 -";
String[] suffixArr = suffixExpression.split(" ");
ArrayList<String> list = new ArrayList<String>();
//将数组转换成 list
for(int i =0 ;i< suffixArr.length;i++){
list.add(suffixArr[i]);
}
//新建立一个栈
Stack<Integer> stack = new Stack<Integer>();
int num1 ;
int num2;
int res = -1 ;
String item ;
//遍历后波兰表达式
for (int i=0;i<list.size();i++){
item = list.get(i);
if(item.matches("\\d+")){
stack.push(Integer.valueOf(item));
}else if (item.equals("+")){
num2 = stack.pop();
num1 = stack.pop();
res = num1+num2;
}else if(item.equals("-")){
num1 = stack.pop();
num2 = stack.pop();
res = num1-num2;
}else if(item.equals("*")) {
num2 = stack.pop();
num1 = stack.pop();
res = num1 * num2;
}else if(item.equals("/")) {
num2 = stack.pop();
num1 = stack.pop();
res = num1 / num2;
}else {
throw new RuntimeException("数字不对!");
}
if(res!=-1)
stack.push(res);
}
System.out.println(stack.peek());
}
}
逆波兰表达式(后缀表达式)
最新推荐文章于 2022-07-23 20:26:52 发布