栈实现后缀表达式的运算
1.简介
利用栈实现对一个形如“14 4 + 5 * 6 -”的后缀表达式的运算
java:jdk1.8
只支持后缀表达式的运算
只支持整数的运算
操作数或操作符之间用空格间隔
2.代码实现
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class SuffixCalculator {
public static void main(String[] args) {
//suffixExpression表示一个后缀表达式的字符串
String suffixExpression ="14 4 + 5 * 6 -";
//将suffixExpression转化成为suffixArrayList,以方便后续进行操作
List<String> suffixArrayList=getSuffixArrayList(suffixExpression);
int results = calculator(suffixArrayList);
System.out.println("后缀表达式:"+suffixExpression+" = "+results);
}
//将suffixExpression转换成为suffixArrayList
public static List<String> getSuffixArrayList(String sue){
String[] split = sue.split(" ");
List<String> suffixArrayList = new ArrayList<>();
for(String value : split){
suffixArrayList.add(value);
}
return suffixArrayList;
}
//进行后缀表达式的运算
public static int calculator(List<String> suffixArrayList){
//创建一个栈,利用栈来实现后缀的表达式的运算,栈中只存贮操作数,最终栈中会保留一个数,该数为最终结果
Stack<Integer> suffixStack=new Stack<>();
for(String value : suffixArrayList){
//判断是否为操作符,是则从栈中取出两个操作数,根据本value的值进行运算
// 不是则直接入栈
if(isOperator(value)){
//从栈中取出第一个操作数
Integer s1 = suffixStack.pop();
//从栈中取出第二个操作数
Integer s2 = suffixStack.pop();
//对操作数进行相应的运算
Integer results = compute(s1,s2,value);
//将两数运算的结果入栈
suffixStack.add(results);
}else {
//入栈
suffixStack.add(Integer.parseInt(value));
}
}
return suffixStack.pop();
}
//判断字符串是否为操作符
public static Boolean isOperator(String value){
if(value.equals("+") || value.equals("-") ||value.equals("*") ||value.equals("/")){
return true;
}else {
return false;
}
}
//按照操作符进行相应的运算
public static Integer compute(Integer s1, Integer s2 , String operator){
Integer results=0;
switch (operator){
case "+": return s1+s2;
case "-": return s2-s1;
case "*": return s1*s2;
case "/": return s2/s1;
}
return results;
}
}
3.运行结果
后缀表达式:14 4 + 5 * 6 - = 84