后缀表达式多语言版(c++ java python等)
后缀表达式,也称为逆波兰表达式,是一种不需要括号的运算表达式。在后缀表达式中,所有的数字和运算符用两个空格隔开,所有的运算符都放在两个操作数的后面。
后缀表达式求值c++代码
#include <iostream>
#include <stack>
#include <sstream>
int main() {
std::string expression = "3 4 + 5 * 1 -"; // 示例后缀表达式
std::istringstream expressionStream(expression);
std::stack<int> numbers;
int number1, number2;
char operatorChar;
while (expressionStream >> number1) {
if (expressionStream >> operatorChar) {
numbers.push(number1);
switch (operatorChar) {
case '+':
number2 = numbers.top(); numbers.pop();
numbers.top() = number1 + number2;
break;
case '-':
number2 = numbers.top(); numbers.pop();
numbers.top() = number1 - number2; // 注意这里是减去第一个数
break;
case '*':
numbers.top() = numbers.top() * number1;
break;
default:
std::cerr << "Unsupported operator: " << operatorChar << std::endl;
return 1;
}
} else {
numbers.push(number1);
}
}
std::cout << "Result: " << numbers.top() << std::endl;
return 0;
}
后缀表达式求值python代码
import stack
# 定义一个函数来求解后缀表达式
def evaluate_postfix(postfix_expression):
s = stack.Stack()
# 遍历后缀表达式中的每个元素
for element in postfix_expression.split():
# 如果是操作数,直接压入栈中
if element.isdigit():
s.push(int(element))
else:
# 如果是操作符,取出栈顶的两个元素进行计算
operand2 = s.pop()
operand1 = s.pop()
result = do_operation(element, operand1, operand2)
s.push(result)
# 返回最终计算的结果
return s.pop()
# 定义一个函数来执行后缀表达式中的操作
def do_operation(operator, operand1, operand2):
if operator == '+':
return operand2 + operand1
elif operator == '-':
return operand2 - operand1
elif operator == '*':
return operand2 * operand1
elif operator == '/':
return operand2 / operand1
# 使用示例
postfix_expression = "4 5 * 3 + 2 -"
result = evaluate_postfix(postfix_expression)
print(result) # 输出计算结果
后缀表达式求值java代码
public class PostfixEvaluator {
public static int evaluate(String postfixExpr) {
Stack<Integer> stack = new Stack<>();
String[] tokens = postfixExpr.split("\\s+");
for (String token : tokens) {
if (isNumeric(token)) {
stack.push(Integer.parseInt(token));
} else {
int b = stack.pop();
int a = stack.pop();
int result = performOperation(a, b, token);
stack.push(result);
}
}
return stack.pop();
}
private static boolean isNumeric(String strNum) {
try {
Integer.parseInt(strNum);
return true;
} catch (NumberFormatException e) {
return false;
}
}
private static int performOperation(int a, int b, String operator) {
switch (operator) {
case "+": return a + b;
case "-": return a - b;
case "*": return a * b;
case "/": return a / b;
default: throw new IllegalArgumentException("Unknown operator: " + operator);
}
}
public static void main(String[] args) {
String postfixExpr = "4 5 + 3 * 2 -";
int result = evaluate(postfixExpr);
System.out.println("Result: " + result); // Output: Result: -1
}
}