当前位置: 首页 > news >正文

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

}

}

相关文章:

  • Python数列求和
  • 芝麻文件重命名 一键批量重命名 支持批量修改图片 文档 文件夹名称
  • 【算法专题--链表】删除排序链表中的重复元素 -- 高频面试题(图文详解,小白一看就懂!!)
  • 第二证券股市资讯:股票中什么叫龙头?
  • Ps:动作面板
  • Nginx 的配置和运行核心数
  • js 微任务 宏任务区别
  • 八、C#运算符
  • iOS cell的复用以及自定义cell
  • 【Mybatis-Plus】根据自定义注解实现自动加解密
  • Docker+MySQL:打造安全高效的远程数据库访问
  • windows pyenv-win:pyenv 下载过慢
  • 赶紧收藏!2024 年最常见 20道设计模式面试题(七)
  • nRF Connect固件升级 OTA DFU Library for Mac and iOS, compatible with nRF5x SoCs
  • AI播客下载:The Gradient-AI前沿见解
  • Android Volley源码解析
  • Docker: 容器互访的三种方式
  • ES6系列(二)变量的解构赋值
  • jQuery(一)
  • mac修复ab及siege安装
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spark RDD学习: aggregate函数
  • Sublime text 3 3103 注册码
  • Swoft 源码剖析 - 代码自动更新机制
  • Twitter赢在开放,三年创造奇迹
  • uni-app项目数字滚动
  • Vue 重置组件到初始状态
  • vue-loader 源码解析系列之 selector
  • 产品三维模型在线预览
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 机器学习中为什么要做归一化normalization
  • 力扣(LeetCode)357
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 问题之ssh中Host key verification failed的解决
  • 小程序button引导用户授权
  • 由插件封装引出的一丢丢思考
  • 责任链模式的两种实现
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​Linux·i2c驱动架构​
  • ​什么是bug?bug的源头在哪里?
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #LLM入门|Prompt#3.3_存储_Memory
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (rabbitmq的高级特性)消息可靠性
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (多级缓存)缓存同步
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (六)激光线扫描-三维重建
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • ./configure,make,make install的作用(转)
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Compact Framework 多线程环境下的UI异步刷新