java实现中缀表达式转后缀表达式

「Java 数据结构和算法」:图文详解---中缀表达式转后缀表达式。 栈是⼀个先⼊后出的有序列表。栈(stack)是限制线性表中元素的插⼊和删除只能在线性表的同⼀端进⾏的⼀种特殊线性表。允许插⼊和删除的⼀端,为变化的⼀端,称为栈顶(Top),另⼀端为固定的⼀端,称为栈底(Bottom)。根据栈的定义可知,最先放⼊栈中元素在栈底,最后放⼊的元素在栈顶,⽽删除元素刚好相反,最后放⼊的元素最先删除,最先放⼊的元素最后删除。...... 阅读详情
public class StackTest {

    public static void main(String[] args){
        String s = "5+4*6/2+3+(4*5)/5";//546*2/+3+45*5/+
//      String s = "2*(9+6/3-5)+4";//2963/+5-*4+

        System.out.println(convert(s));
    }

    /**
     * 等级很重要
     * 优先级最高的是"(",因为一定会进栈
     * 次之为"/*"
     * 再为"+-"
     * 优先级最低的是")",一定会连带其他的运算符出栈
     * 数字不进栈
     * @param c
     * @return
     */
    public static int level(char c){
        if("(".indexOf(c) > -1){
            return 3;
        }else if("*/".indexOf(c) > -1){
            return 2;
        }else if("+-".indexOf(c) > -1){
            return 1;
        }else if(")".indexOf(c) > -1) {
            return 0;
        }else {
            return -1;
        }
    }

    public static String convert(String ss){
        char[] chars = ss.toCharArray();
        //保存输出结果
        StringBuilder sb = new StringBuilder();
        Stack<Character> stack = new Stack();

        for (int i = 0; i < chars.length; i++){
            char c = chars[i];
            //数字不进栈
            if(level(c) == -1){
                sb.append(c);
            }else {
                //运算符
                if(stack.isEmpty()){
                    //栈为空,符号直接进栈
                    stack.push(c);
                }else {

                    if(level(c) > level(stack.peek())){
                        //进栈的运算符级别大于栈顶的级别
                        stack.push(c);
                    }else {

                        if(level(stack.peek()) == 3 ){
                            //栈顶是最高级别的是时候,进栈元素的级别是1-3
                            if(level(c) != 0){
                                //如果进栈的不是")"
                                stack.push(c);
                            }else {
                                //栈顶为"(",进栈元素")"
                                //不存在()里面没有运算符的,无意义
                            }
                        }else {
                            //栈顶不是最高级别

                            if(level(c) == 0){
                                //进栈是")",栈顶不是"(",先出栈,添加到返回值中
                                while (level(stack.peek()) != 3){
                                    sb.append(stack.pop());
                                }
                                //如果栈顶是"(",直接出栈
                                if(level(stack.peek()) == 3){
                                    stack.pop();
                                }
                            }else {
                                //进栈元素级别小于或等于栈顶元素级别
                                sb.append(stack.pop());
                                while (!stack.isEmpty()&&level(stack.peek()) >= level(c)&&level(stack.peek()) != 3){
                                    //循环出栈同级别的元素,出栈到返回值中
                                    sb.append(stack.pop());
                                }
                                stack.push(c);
                            }
                        }
                    }
                }
            }
        }

        //2+4  循环结束后,栈内还有运算符,出栈到返回值中
        while (!stack.isEmpty()){
            sb.append(stack.pop());
        }
        return sb.toString();
    }
}

 

【数据结构】java实现中缀表达式转后缀表达式计算器 01 后缀表达式介绍 后缀表达式 这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。这 02 中缀表达式转后缀表达式 中缀表达式转后缀表达式 初始化两个栈,运算符栈s1和中间结果栈s2 2.1 代码实现 因为String形式的算式不方便处理,首先将不带空格的中缀表达式添加到一个list里 // 将不带空格的中缀表达式转换成list public static List<String>... 阅读详情

相关推荐

《寻秦OL》.ani动画逆向解析:二进制结构与Unity重实现

动画文件格式是游戏资源逆向的核心入口,其本质是一组按特定规则组织的二进制数据流。理解魔数识别、字节序、字段对齐与差分编码等底层原理,是解析非标准格式的关键前提。技术价值在于绕过黑盒协议,直接从静态客户端提取可验证的原始语义;典型应用场景包括老游戏复刻、美术资产抢救、引擎跨平台迁移及教学级逆向训练。本文以《寻秦OL》的`.ani`文件为实例,深入剖析其C风格结构布局、GB2312中文命名、16位定点数旋转表示及帧主序差分存储机制,并基于C#在Unity中完成从字节流到AnimationClip的端到端重建,覆

weixin_30368981的博客 641

Java实现中缀表达式转后缀表达式

逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)在实现中缀转后缀之前我们先了解后缀表达式的实现,学习过编译原理这门的课程的同学,应该对逆波兰式非常的熟悉哈,没错他就是后缀表达式。

Code Writers 636

Ubuntu安装有线网卡驱动

问题:插入网线后,无法识别有线连接。 原因:主板有线网卡的型号和系统中网卡的驱动不匹配 解决 前提条件: 需要连wifi通网,因为需要安装dkms,和下载驱动。 删除原驱动 1、查看网卡型号 lspci | grep net 我的网卡型号是8125 2、查看网卡驱动 lspci -k 网卡驱动是r8169 3、卸载网卡驱动 找出位置 modinfo r8169 | grep filename 然后删除 rm path/r8169.ko 卸载驱动 rmmod r8169 查看是否卸载成功 lsm

weixin_43932656的博客 1万+

Java-中缀表达式转后缀

本文先给出思路与方法,最后将给出完整代码 项目实战: https://blog.youkuaiyun.com/qq_43377749/article/details/84973206 算法综述: 一、中缀表达式转后缀表达式: 1.中缀表达式要转后缀表达式,首先需要两个Stack(栈),其中一个应用于存放字符,另一个用于存放数字。 2.读到数字直接存入数字栈中,读到字符时,要咸鱼栈内前一元素(字符)...

圆号本号 624

瑞芯微RK3576开发板实战:6TOPS NPU如何加速你的AIoT项目(附性能测试)

本文以瑞芯微RK3576开发板为核心,深入探讨其6TOPS NPU在AIoT项目中的实战应用。通过详细的性能测试对比,展示了NPU如何将AI模型推理速度提升15倍以上,并大幅降低CPU负载。文章涵盖从环境搭建、模型转换优化到多屏异显与系统级调优的全流程,为开发者提供了将硬件算力转化为实际项目加速效果的完整指南。

oauth7security的博客 821

无人机蜂群作战设计技术详解

构建防御网络,拦截敌方无人机或导弹;无人机蜂群作战设计技术是一种创新的军事应用概念,它基于生物仿生学原理,通过先进的通信技术、自主导航与决策算法,将大量小型、低成本、功能各异的无人机组织成一个高度协同的群体,以执行复杂多样的军事任务。无人机蜂群作战的概念源于自然界中蜜蜂、蚂蚁等生物群体的行为模式,这些生物群体通过简单的个体间的信息交互和分工协作,能够完成远远超出单一个体能力的复杂任务。其中,无人机群体是执行任务的主体,指挥控制系统负责任务分配和决策,通信数据链则保障无人机群体与指挥控制系统之间的信息交换。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 2217

java后缀表达式_Java中缀表达式转后缀表达式实现方法详解

本文实例讲述了Java中缀表达式转后缀表达式实现方法。分享给大家供大家参考,具体如下:本文先给出思路与方法,最后将给出完整代码项目实战:算法综述:一、中缀表达式转后缀表达式:1.中缀表达式要转后缀表达式,首先需要两个Stack(栈),其中一个应用于存放字符,另一个用于存放数字。2.读到数字直接存入数字栈中,读到字符时,要咸鱼栈内前一元素(字符)进行比较,当当前(要存入的字符)优先级大于迁移字符时才...

weixin_36068796的博客 647

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

Java实现:中缀表达式转后缀表达式

使用Java实现中缀表达式转后缀表达式。

猫晨的技术小屋 747

从部署到养成:Hermes智能体接入DeepSeek与微信机器人的完整实战指南

智能体(Agent)正成为大模型从“对话”走向“行动”的关键形态。它通过拆解指令、调用工具、执行任务,让AI真正参与工作流。Hermes作为可本地部署的开源智能体框架,支持接入DeepSeek等主流大模型,并提供网关、工具调用、记忆管理等模块化能力。从Docker容器部署到微信机器人桥接,从自动化定时任务到Computer Use桌面控制,Hermes将个人助理从概念落地为可运行的工程系统。本文基于真实实践,梳理架构原理、部署流程、API配置与高频故障排查,为技术玩家提供一套从零到一的上手指南。

weixin_29045001的博客 263

SAR成像专栏目录

为方便大家阅读,我做了一个专栏目录,蓝色字有超链接,可以直接打开。 本专栏默认读者已具备雷达系统的基本知识或者已阅读过雷达导论专栏中的文章。 1. 概述 SAR成像概述 星载SAR的各项指标解读(史上最全) SAR成像算法的实现途径与算力分析 2. SAR成像原理与SAR系统简介 雷达与分辨率 SAR成像原理与方法 SAR图像的形成和处理 SAR系统设计 3. 点目标仿真 点目标仿真(一)—— 数学模型 点目标仿真(二)—— Matlab仿真 4. 成像算法 更新中 雷达导论专

7472

Java实现多功能中缀表达式转后缀表达式并求值

代码实现带括号,多位数,小数,正负数的四则,取余,以及三角函数和反三角函数运算。

2201_75317009的博客 2170

KubeVela入门到精通-K8S多集群交付

KubeVela是一个功能强大、易于使用、高度可扩展的应用交付与管理平台。它基于Kubernetes和OAM 技术构建,通过开放应用模型(OAM)来作为顶层的抽像,提供了声明式部署、多集群/混合环境支 持、插件与扩展性、中心化管控以及易于使用与可观测性等特点。

小杨同学的博客 1270

实现中缀表达式转后缀表达式(java)

实现中缀表达式转后缀表达式 中缀表达式转后缀表达式的思路步骤分析: 1.初始化两个栈:运算符栈s1和存储中间结果的栈s2; 2.从左至右扫描中缀表达式; 3.如果遇到操作数时,将其压入s2; 4.如果运算符时,比较其与s1栈顶运算符的优先级;  (1)如果s1为空,或栈顶运算符为左括号“(”,则直接入栈;  (2)否则,若优先级比栈顶运算符高,也将运算符压入s1;  (3)否则,将s1栈顶运算符弹出并压入s2中,再转到4-(1)与s1中新的栈顶运算符相比较; 5.遇到括号时:  (1)如果是左括号“(”,则

xiaowanziddd的博客 2355

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java后缀是转中缀表达式过程_java实现中缀表达式转后缀表达式

public class StackTest {public static void main(String[] args){String s = "5+4*6/2+3+(4*5)/5";//546*2/+3+45*5/+// String s = "2*(9+6/3-5)+4";//2963/+5-*4+System.out.println(convert(s));}/*** 等级很重...

weixin_29625619的博客 306

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java实现中缀表达式转后缀表达式并且计算

自己写一个栈 用数组实现package cn.itcast.StackAndQuen; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * Created by likailong on 2016/10/16. * 中缀表达式到后缀表达式 */ public class Ma

李凯龙 3601

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

中缀表达式转后缀表达式java实现

输入一个字符串计算式子,输出其中缀表达式。 先将计算式子转换为list public static List<String> infexList(String s){ int index = 0; String str; final List<String> strings = new ArrayList<>();...

weixin_46008168的博客 183

数据结构之中缀表达式转后缀表达式(Java实现)

上一篇文章中用java实现了后缀表达式的计算,链接https://blog.youkuaiyun.com/xindanding/article/details/90443998 但是我们在计算时不可能手动将要计算的表达式转为后缀再丢给计算器吧,这样的话那还要计算器干嘛,是吧。。。。 接下来要讲的是如何将中缀表达式转为后缀表达式。 首先,建立一个节点: //节点用于保存运算符,这与后缀表达式的计算不...

欣淡定的博客 2445

中缀表达式转后缀表达式 栈实现与计算(JAVA)

中缀表达式转后缀表达式 栈实现(JAVA) 中缀表达式:1+2*(3-4+5)*6-7+8 后缀表达式:1 2 3 4 - 5 + * 6 * + 7 - 8 + 优先级: -+ 优先级低 */ 优先级高 ‘(’ ‘)’ 特殊处理 中缀转后缀的实现方法: 1.创建一个栈存放运算符 2.左→右遍历算式 3. 算数直接输出 4. 遇到 ‘(’ 直接入栈(入栈后优先级最低) 5. 遇到 ‘)’ 先循环将...

Kming98的博客 578

用Java实现中缀表达式转后缀表达式

中缀表达式转后缀表达式 后缀表达式 后缀表达式又称逆波兰表达式,明显的特点是:逆波兰表达式中没有括号,计算时将操作符之前的第一个数作为右操作数,第二个数作为左操作数,进行计算,得到的值继续放入逆波兰表达式中。 但日常生活中我们总是习惯于写中缀表达式,所以需要先将中缀表达式转为后缀表达式。 规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。 简单图解后缀表达式 opStack用于存储操作符,suffixList用于存

m0_51119239的博客 2799

中缀表达式转后缀表达式,Java实现

中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3+4),中缀表达式是人们常用的算术表示方法。 与前缀表达式(例:+34)或后缀表达式(例:34+)相比,中缀表达式不容易被计算机解析,但仍被许多程序语言使用,因为它符合人们的普遍用法。 例如: 例1:8 + 4 - 6 * 2 用后缀表达式表示为: 8 4 + 6 2 * - 例2:2 * ( 3...

weixin_30463341的博客 195

Java用栈实现 中缀表达式转后缀表达式

先了解一下什么是中缀和后缀表达式中缀表达式就是我们平常写的算式,比如2*(3+4)-8/2,它对应的后缀表达式是234+*82/-。不要着急,接下来我们看看是怎么得到后缀表达式的。当遇到数字时,直接输出,遇到符号入栈,在入栈之前需要判断各操作符的优先级大小,判断规则如下。===栈外&gt;栈内: 将栈外操作符入栈===栈外&lt;栈内: 将栈内操作符出栈===栈内=栈外: 规定栈内高于栈外,将栈内...

huijerry的博客 1810

JAVA代码实现中缀表达式转后缀表达式并求值

中缀表达式转后缀表达式并求值 最近学习了利用栈实现中缀表达式转后缀表达式并求值的实现方式。目前只实现了加减乘除操作,小数部分暂时未考虑。如有错误之处,还望指出,我会及时改正。 package com.stack.calulator; import java.util.ArrayList; import java.util.List; import java.util.Stack; /* * ...

qq_41665523的博客 797
上一篇: quartz整合spring框架service层对象注入为null解决方案
下一篇: redis 哨兵机制环境搭建
KeThink
博客等级 码龄10年 7粉丝 26原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值