📅  最后修改于: 2023-12-03 15:37:14.207000             🧑  作者: Mango
这是一道关于栈(Stack)的问题,需要程序员掌握栈的基本特点和操作。
给定一个以逆波兰表达式表示的算术表达式,求其值。
逆波兰表达式是一种表示算术表达式的方法,其中运算符位于操作数之后。例如,用逆波兰表达式表示“3 + 4”是“3 4 +”。常见的四种运算符(+、-、*、/)均可用。
使用栈来解决这个问题。算法的基本思路是遍历逆波兰表达式中的每个元素,如果该元素是操作数,则将其入栈;如果该元素是运算符,则取出栈顶的两个元素进行运算,并将结果压入栈中。最后,栈中的唯一元素就是所求的表达式的值。
下面是用Java语言实现的代码片段,用于计算逆波兰表达式的值。
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i < tokens.length; i++) {
if (tokens[i].equals("+")) {
int a = stack.pop();
int b = stack.pop();
stack.push(b + a);
} else if (tokens[i].equals("-")) {
int a = stack.pop();
int b = stack.pop();
stack.push(b - a);
} else if (tokens[i].equals("*")) {
int a = stack.pop();
int b = stack.pop();
stack.push(b * a);
} else if (tokens[i].equals("/")) {
int a = stack.pop();
int b = stack.pop();
stack.push(b / a);
} else {
stack.push(Integer.parseInt(tokens[i]));
}
}
return stack.pop();
}
本篇文章介绍了一道栈(Stack)的基础问题。逆波兰表达式是一种经典的算术表达式表示方法,了解其背后的算法思想可以帮助程序员更好地应用栈来解决问题。