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

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

U盘删除的文件怎么找回?数据恢复,5个方法

“我的u盘里有部分文件不小心被删除了&#xff0c;尝试了很多的方法都无法找回它们。U盘删除的文件怎么找回呢&#xff1f;希望大家给我出出主意&#xff01;” 保存了很多重要的文件在u盘中&#xff0c;查看u盘内存时却发现很多文件被删除了&#xff1f;别慌&#xff01;即使u…

系统架构设计师【论文-2020年 试题4】: 论企业集成架构设计及其应用(包括解题思路和经典范文)

文章目录 真题题目&#xff08;2020年 试题4&#xff09;写作要点经典范文 真题题目&#xff08;2020年 试题4&#xff09; 论企业集成架构设计及其应用 企业集成架构&#xff08;Enterprise Integration Architecture&#xff0c;ElA)是企业集成平台的核心&#xff0c;也是解…

B树(数据结构篇)

数据结构之B树 B-树(B-tree) 概念&#xff1a; B-树是一个非二叉树的多路平衡查找树(数据有序)&#xff0c;是一颗所有数据都存储在树叶节点上的树&#xff0c;不一定存储具体的数据&#xff0c;也可以是指向包含数据的记录的指针或地址 对于**阶为M(子节点数量在2和M之间)*…

Properties与xml知识点总结

文章目录 一、Properties1.1 构造方法1.2 从Properties文件中获取1.3 向Properties文件中存储 二、xml2.1 XML2.2 特点2.3 规则2.3 抬头声明2.4 特殊字符2.5 CDATA区段2.4 作用和应用场景 三、区别 一、Properties 定义&#xff1a;properties是一个双列集合集合&#xff0c;拥…

Python启多个线程,运行多个Python文件

哈喽,大家好,我是木头左! 在多任务处理的场景中,经常需要同时运行多个Python文件。为了提高程序的效率和性能,可以使用Python的多线程功能来并发执行这些文件。本文将介绍如何使用Python创建多个线程,并运行多个Python文件。 1. 导入所需库 需要导入一些必要的库来实现多…

android 在线程中更新界面

在Android中&#xff0c;你不能直接从子线程中更新UI&#xff0c;因为这会导致应用崩溃。你需要使用Handler或runOnUiThread()来更新UI。 使用Handler 以下是如何使用Handler在子线程中更新UI的示例&#xff1a; 1. 创建Handler实例&#xff1a; import android.os.Bundle;…

MicroBlaze IP核中的外设接口和缓冲器接口介绍

MicroBlaze IP核是Xilinx公司提供的一个嵌入式软核处理器&#xff0c;广泛应用于FPGA设计中。在MicroBlaze IP核中&#xff0c;外设接口和缓冲器接口是处理器与外部设备和内存交互的关键部分。 1 外设接口 MicroBlaze处理器中的AXI4 内存映射外设接口AXI4是一种在Xilinx FPGA设…

探索Selenium:通过JavaScript增强UI测试效率和效果

在自动化测试中&#xff0c;模拟用户的行为只是任务的一部分。许多时候&#xff0c;测试人员需要更多的控制和灵活性&#xff0c;以验证应用程序的功能和性能。Selenium WebDriver 提供了执行 JavaScript 代码的能力&#xff0c;这一特性为测试人员打开了新的可能性。本文将深入…

产品经理方法论

1、用户体验 5 要素 1&#xff0c;表现层是你拿到一个产品以后&#xff0c;视觉表现&#xff0c;配色&#xff0c;布局&#xff0c;排版等等 2&#xff0c;框架层&#xff0c;是交互层面的东西&#xff0c;比如&#xff0c;操作情况&#xff0c;刷新&#xff0c;页面跳转&…

ChatmoneyAI如狂风般席卷广告创意舞台,轻松闯荡财富之海!

本文由 ChatMoney团队出品 引言 在广告创意行业&#xff0c;创新和高效是赢得市场的关键。而我今天要分享的就是如何利用ChatmoneyAI这款强大的人工智能工具&#xff0c;打破创新难题&#xff0c;赚取丰厚收益。 让我告诉你一个小秘密&#xff0c;有客户曾在一个月内&#xf…

git merge(3个模式) 与 git rebase 图文详解区别

目录 1 git merge1.1 模式一&#xff1a;fast-forward(–ff)1.2 模式二&#xff1a;non-Fast-forward(–no-ff)1.3 模式三&#xff1a;fast-forward only(–ff-only) 2 git rebase3 区别 1 git merge git merge有好几种不同的模式 默认情况下你直接使用 git merge 命令&#x…

从boost库到时间戳

一、以问题引入 授权证书一般有到期时间的说法&#xff0c;公司测试同事在测试更新后的证书时&#xff0c;将系统时间调到了2050年&#xff0c;重启服务后发现各个进程的cpu占用率特别高&#xff1b;结合日志分析&#xff0c;发现这些进程 都在不停的刷heartbeat()的日志&#…

C++17并行算法与HIPSTDPAR

C17 parallel algorithms and HIPSTDPAR — ROCm Blogs (amd.com) C17标准在原有的C标准库中引入了并行算法的概念。像std::transform这样的并行版本算法保持了与常规串行版本相同的签名&#xff0c;只是增加了一个额外的参数来指定使用的执行策略。这种灵活性使得已经使用C标准…

AI 音乐大模型:创新的曙光还是创意产业的阴影?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

JavaScript Window History

JavaScript Window History 简介 JavaScript 中的 window.history 对象提供了与浏览器历史记录交互的能力。这个对象是 window 对象的一个属性,允许开发者访问和操作用户在浏览器中的导航历史。通过 window.history,开发者可以实现页面后退、前进以及添加新的历史记录等功能…

有效的字母异位词--力扣242

有效的字母异位词 题目思路C代码 题目 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。s 和 t 仅包含小写字母。 示例 1: 输入: s “an…

字符串的相关函数

1.strcpy 字符串拷贝函数 头文件&#xff1a; #include <string.h> char *strcpy(char *dest, const char *src); 参数&#xff1a; const char *src&#xff1a;被拷贝字符串的首地址 char *dest&#xff1a; 拷贝到目标的首地址 返回值&#xff1a; …

云原生-k8s中的 Tab 自动补全功能

文章目录&#xff1a; 1、首先你需要安装bash-completion&#xff0c;能够自动补全 2、配置环境变量 3、生效此配置 1、首先你需要安装bash-completion&#xff0c;能够自动补全 yum -y install bash-completion2、配置环境变量 echo source <(kubectl completion b…

[面试题]Kafka

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

RAG(检索增强生成)的演变:初级 RAG、高级 RAG 和模块化 RAG 架构

大型语言模型&#xff08;LLMs&#xff09;通过在自然语言任务及其它领域的成功应用&#xff0c;如 ChatGPT、Bard、Claude 等所示&#xff0c;已经彻底改变了 AI 领域。这些 LLMs 能够生成从创意写作到复杂代码的文本。然而&#xff0c;LLMs 面临着幻觉、过时知识和不透明、无…