栈应用——逆波兰式表达式的值
问题描述:
计算给定的逆波兰表达式(即后缀表达式)的值。
事实上,二元运算的前提下,中缀表达式可以对应一棵二叉树;逆波兰式即该二叉树后序遍历的结果。
分析思路:
- 如果当前是操作数,则直接入栈;
- 如果当前是操作符,则栈顶的两个元素弹出,然后与当前操作符运算后入栈。
Code:
/** * 给出一个逆波兰式,计算该表达式的值 * @param s * @return */ public int getTheValueOfRPN(String s) { char[] ch = s.toCharArray(); Stack<Integer> stack = new Stack<Integer>(); for(int i=0; i<ch.length; i++) { if(isOperator(ch[i])) { int v1 = stack.peek(); stack.pop(); int v2 = stack.peek(); stack.pop(); if(ch[i] == '+') stack.push(v1 + v2); else if(ch[i] == '-') stack.push(v1 - v2); else if(ch[i] == '*') stack.push(v1 * v2); else stack.push(v1 / v2); } else stack.push(Integer.valueOf(ch[i]-48)); } return stack.pop(); } private boolean isOperator(char c) { // TODO Auto-generated method stub if(c == '+' || c == '-' || c == '*' || c == '/') return true; return false; }