数据结构-栈-表达式运算

文章目录

  • 表达式运算实现:
    • 1.栈实现
    • 2.中缀表达式转后缀表达式计算

表达式运算实现:

1.栈实现

public class ExpressCalc {public static void main(String[] args) {/*使用栈实现一个0-9整数带括号的表达式计算处理步骤:1.创建两个栈,一个符号栈(左括号、右括号、加、减、乘、除),左括号优先级最高,右括号优先级最低,一个数字栈(0-9)2.遇到数字:直接入数字栈3.遇到符号:如果符号栈为空,则直接入符号栈如果当前符号优先级 > 栈顶符号优先级:直接入符号栈如果当前符号优先级 <= 栈顶符号优先级:将数字栈与符号栈元素弹出,进行运算,直到栈为空或者当前符号优先级 > 栈顶符号优先级为止*/String[] expressArray = {"2+3*(1+2*4)-3*5","2+3","2+3+(3*4/2)-1","2+3+(3*4/2+5)-1","2+3+(3*4/2+5-9)-1","2+3+(3*4/2+5-9)-1+2*(1+2)","2",};for (String expressStr : expressArray) {int num = calcExpress(expressStr);System.out.println(expressStr + "=" + num);}}private static int calcExpress(String expressStr) {Stack<Integer> numSt = new Stack<>();Stack<Character> symbolSt = new Stack<>();char[] cs = expressStr.toCharArray();for (int i = 0; i < cs.length; i++) {// 匹配数字if(String.valueOf(cs[i]).matches("\\d")){numSt.add(cs[i] - '0');}else if(cs[i] == '+' || cs[i] == '-' || cs[i] == '*' || cs[i] == '/' || cs[i] == '(' || cs[i] == ')'){if(symbolSt.isEmpty() || priority(cs[i], symbolSt.peek())){symbolSt.add(cs[i]);}else{while(!symbolSt.isEmpty() && symbolSt.peek() != '(' && !priority(cs[i], symbolSt.peek())){Integer n1 = numSt.pop();Integer n2 = numSt.pop();int res = calc(n2, n1, symbolSt.pop());numSt.add(res);}if(!symbolSt.isEmpty() && symbolSt.peek() == '(') symbolSt.pop();if(cs[i] != ')') symbolSt.add(cs[i]);}}}while(!symbolSt.isEmpty()){Integer n1 = numSt.pop();Integer n2 = numSt.pop();int res = calc(n2, n1, symbolSt.pop());numSt.add(res);}return numSt.pop();}// 优先级判断 a > b : 返回true,否则返回falsepublic static boolean priority(char a, char b){if(a == '(') return true;if((a == '*' || a == '/') && (b == '+' || b == '-' || b == ')')) return true;if((a == '+' || a == '-') && b == ')') return true;return false;}public static int calc(int a, int b, char express){switch (express){case '+':return a + b;case '-':return a - b;case '*':return a * b;case '/':return a / b;default:throw new RuntimeException("不支持" + express + "进行运算");}}
}

2.中缀表达式转后缀表达式计算

https://blog.csdn.net/Linging_24/article/details/104481492

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

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

相关文章

Yolov8-pose关键点检测:特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合YOLOv8-pose,实现涨点。 将GELAN添加在backbone和head处,提供多个yaml改进方法 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_6377421…

SSRF服务器请求伪造原理和pikachu靶场实验

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、SSRF简介 SSRF全称&#xff1a;Server-Side Request…

java两个实体类相同属性的复制

1、操作对象工具 MyBeanUtils package com.nrxt.nms.mon.pt.cascade.utils;import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansEx…

017集——圆弧(ARC)转多段线(lwpolyline)——cad vba 中按一定精度拟合加点实现

在国土资源管理项目中&#xff0c;我们经常会遇到CAD转gis数据实现入库&#xff0c;而cad中的arc圆弧转为gis数据只能转出弧的顶点坐标&#xff0c;导致图形变形失真。若一个一个对弧进行手工增加点转为多段线&#xff0c;耗时耗力&#xff0c;效率极其低下。这里给出解决方案&…

C#(C Sharp)学习笔记_字符串的常用操作方法【十一】

文章目录 索引字符串( Index )遍历字符串( for )拆分字符串( Split )替代字符串( Replace )提取字符串( Substring )插入字符串( Insert )移除字符串( Remove ) 索引字符串( Index ) 当我们要查看字符串中的某个字符时&#xff0c;我们可以使用索引功能。 string ax "我…

继承杂谈。

内容一览 前言继承的概念及定义继承的意义继承关系及访问限定符父类和子类对象之间的转化继承后的作用域继承与有元继承与静态成员多继承继承和组合的区别&#xff1a;继承的总结和反思 前言 面向对象的三大特性&#xff1a;封装继承和多态&#xff0c;这三种特性优者很紧密地联…

【Prometheus】PromQL

数据类型 即时向量&#xff08;instant vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtualbox",mode"idle"} 区间向量&#xff08;range vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtu…

手拉手RocketMQ基础

消息中间件的对比 消息中间件 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单击吞吐量 万级 万级 10万级 10万级 时效性 ms us ms ms 可用性 高(主从架构) 高(主从架构) 非常高(主从架构) 非常高(主从架构) 消息中间件: activ…

MetaGPT部分源码解读

Action SerializationMixin&#xff1a; Pydantic在序列化一个对象时&#xff0c;会将其序列化为其最顶层父类的形式&#xff0c;而不是它实际子类的形式。这意味着&#xff0c;如果你有一个父类和一个继承自该父类的子类&#xff0c;当你将子类的实例序列化时&#xff0c;得到…

HTTP常见报错响应码

HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。响应分为五类&#xff1a; 信息响应成功响应重定向客户端错误服务器错误 1 、信息响应 100 Continue 这个临时响应表明&#xff0c;迄今为止的所有内容都是可行的&#xff0c;客户端应该继续请求&#xff0c;如果已经完 …

云上攻防-云产品篇堡垒机场景JumpServer绿盟SASTeleport麒麟齐治

知识点 1、云产品-堡垒机-产品介绍&攻击事件 2、云产品-堡垒机-安全漏洞&影响产品 章节点&#xff1a; 云场景攻防&#xff1a;公有云&#xff0c;私有云&#xff0c;混合云&#xff0c;虚拟化集群&#xff0c;云桌面等 云厂商攻防&#xff1a;阿里云&#xff0c;腾讯…

k8a 对外服务(ingress)详解(定义,暴露,代理,重写,)

目录 一、 对外服务 service策略的作用 外部访问方案 适用场景和限制 ingress如何实现对外服务 ingress 概念 定义 组成 工作原理 总结 二、 部署 nginx-ingress-controller 创建 ingress-controller pod及相关资源 创建目录&#xff1a; 下载配置文件 修改 集群…

CSS拖曳盒子案例

让我为大家带来一个小案例吧&#xff01; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box1 {width: 100px;height: 100px;background-color: black;margin-bot…

iMazing3 2024详细解析数据备份与恢复备份

iMazing 3的备份功能支持增量备份&#xff08;类似苹果电脑里的Time Machine功能&#xff09;&#xff0c;意思是第一次把移动设备的数据全部备份下来&#xff0c;之后的备份就只针对数据有变化的那部分&#xff0c;这样可以节省大量的时间和存储空间&#xff0c;不会让使用者为…

LeetCode59:螺旋矩阵Ⅱ

题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 代码 class Solution { public:vector…

00-ESP-IDF 环境配置指南

ESP-IDF 环境配置指南 ESP-IDF安装 1.首先我们在浏览器搜索esp-idf&#xff0c;点击第一个选项 2.点击右边栏的安装 3.我们选择手动安装选择需要的系统版本 4.点击链接 5.这里我们选择一个版本&#xff0c;建议不要选择最新的&#xff0c;安装出现问题在网上不好找到解决办…

蓝桥杯备战刷题-滑动窗口

今天给大家带来的是滑动窗口的类型题&#xff0c;都是十分经典的。 1&#xff0c;无重复字符的最长子串 看例三&#xff0c;我们顺便来说一下子串和子序列的含义 子串是从字符串里面抽出来的一部分&#xff0c;不可以有间隔&#xff0c;顺序也不能打乱。 子序列也是从字符串里…

Vue+SpringBoot打造个人健康管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健康咨询模块 三、系统展示四、核心代码4.1 查询健康档案4.2 新增健康档案4.3 查询体检档案4.4 新增体检档案4.5 新增健康咨询 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

【周总结周末日常】

周总结 完成任务开发并且与前端联调通过 完成已开发功能的冒烟测试 修复测试中出现的一些数据显示问题 2024/3/10 晴 温度适宜 这周天气比上周好多了&#xff0c;最起码见到好几次太阳 周六在世纪公园溜达一会儿&#xff0c;偶尔呼吸下大自然&#xff0c;挺棒的…

[2023年]-hadoop面试真题(二)

[2023年]-hadoop面试真题(一) &#xff08;北京&#xff09; Maptask的个数由什么决定?&#xff08;北京&#xff09; 如何判定一个job的map和reduce的数量 ?&#xff08;北京&#xff09; MR中Shuffle过程 ?&#xff08;北京&#xff09; MR中处理数据流程 ?&#xff08;…