后缀表达式多语言版(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

}

}

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光宅男xxb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值