思路如下:

1、初始化两个栈,运算符栈和中间结果栈

2、从左至右扫描

3、遇到数时直接压入s2

4、遇到运算符时,比较其与s1栈顶的优先级,有如下几种情况:

1)s1为空或栈顶为“(”或此运算符优先级大于s1栈顶符优先级时,直接入栈

2)s1栈顶运算符优先级大于等于该运算符时,不断从s1栈中弹出栈顶 并压入s2直到s1为空或优先级大于s1栈顶。然后将此运算符压入s1

5、遇到括号时:

1)为左括号则直接压入s2

2)为右扩号时则不断弹出s1栈顶压入s2直到遇到左括号时,停止弹出并将这一对括号丢弃

6、扫描到最右边时结束循环

7、将s1中的运算符依次弹出并压入s2

8、依次弹出s2中的元素并输出,结果的逆序则为后缀表达式。

主要依赖两个方法,

1、将中缀表达式分割转换为一个list

需要考虑多位数,遍历字符串s,不是数字则直接add入list,是数字则进入while循环直到结束或得到的后一位不为数字了结束拼接,add入list刚刚得到的拼接字符串

public static List<String> tolist(String s){
List<String> list=new ArrayList<String>();
String str="";
char ch=' ';
int i=0;
do {
if((s.charAt(i)<48)||(s.charAt(i)>57)){
list.add(""+s.charAt(i));
i++;
}else {
str="";
while (i<s.length()&&s.charAt(i)>=48&&s.charAt(i)<=57){
str+=s.charAt(i);
i++;
}
list.add(str);
}
}while (i<s.length());
return list;
}

2、将分割后的list转换为后缀表达式

定义两个栈,但由于s2没有pop的操作且之后还要倒序输出所以这里以list来代替栈。遍历list,依据上述描述来写逻辑。

public static List<String> parseList(List<String> list){
Stack<String> stack=new Stack<String>();
List<String> ls=new ArrayList<String>(); for (String item:list){
if(item.matches("\\d+")){
ls.add(item);
}else if (item.equals("(")){
stack.push(item);
}else if (item.equals(")")){
while (stack.size()!=0&&!stack.peek().equals("(")){
ls.add(stack.pop());
}
stack.pop();
}else {
while (stack.size()!=0&&oper.getvalue(stack.peek())>=oper.getvalue(item)){
ls.add(stack.pop());
}
stack.push(item);
} }
while (stack.size()!=0){
ls.add(stack.pop());
}
return ls;
}

14.java 中缀表达式转后缀表达式的更多相关文章

  1. 【java】中缀表达式转后缀表达式 java实现

    算法: 中缀表达式转后缀表达式的方法:1.遇到操作数:直接输出(添加到后缀表达式中)2.栈为空时,遇到运算符,直接入栈3.遇到左括号:将其入栈4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出 ...

  2. 中缀表达式转后缀表达式(Java代码实现)

    后缀表达式求值 后缀表达式又叫逆波兰表达式,其求值过程可以用到栈来辅助存储.例如要求值的后缀表达式为:1 2 3 + 4 * + 5 -,则求值过程如下: 遍历表达式,遇到数字时直接入栈,栈结构如下 ...

  3. Java堆栈的应用2----------中缀表达式转为后缀表达式的计算Java实现

    1.堆栈-Stack 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  4. 数据结构Java实现06----中缀表达式转换为后缀表达式

    本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...

  5. .net表达式计算器(中缀表达式转后缀表达式,支持20多个数学函数,支持函数嵌套)

    最近在网上查了一下表达工计算器的类库,发现Java版本的有一个比较成熟的叫W3EVal,好像是一个IBM工程师写的,.net就很少了(可能是我了解不够多),但投机取巧的实现思路有很多,比如: (1)将 ...

  6. 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放

    01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...

  7. C语言- 基础数据结构和算法 - 09 栈的应用_中缀表达式转后缀表达式20220611

    09 栈的应用_中缀表达式转后缀表达式20220611 听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/ ...

  8. 利用stack结构,将中缀表达式转换为后缀表达式并求值的算法实现

    #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...

  9. RPN-逆波兰计算器-中缀表达式转后缀表达式-javascript

    1.利用栈(Stack)来存储操作数和操作符: 2.包含中缀表达式转后缀表达式的函数,这个是难点,也是关键点: 2.1.将输入字符串转为数组: 2.2.对转换来的字符进行遍历:创建一个数组,用来给存储 ...

  10. 练习3.20 a 将中缀表达式转换为后缀表达式

    //将中缀表达式转换为后缀表达式 int main() { ; ]={,,,,,,,}; char tmp; PtrToStack s; s = CreateStack( MaxSize ); ) { ...

随机推荐

  1. RESTful相关信息整理

    RESTful相关信息整理 参考:可以看的出来我是阮一峰的忠实读者 阮一峰的<理解RESTful架构> https://www.ruanyifeng.com/blog/2011/09/re ...

  2. 一文详解数仓GaussDB(DWS) 函数出参带出方式

    摘要:本文主要讲解DWS函数出参带出方式. 本文分享自华为云社区<GaussDB(DWS)功能 -- 函数出参 #[玩转PB级数仓GaussDB(DWS)]>,作者:譡里个檔 . DWS的 ...

  3. Spring02---IOC-Debug查看Bean的实例化过程

    1 简介 springIOC它是对bean进行管理. 我们通常可以通过xml.properties.yml.注解等来配置bean的信息 spring读取这些配置信息,解析,生成BeanDefiniti ...

  4. odoo 为可编辑列表视图字段搜索添加查询过滤条件

    实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如下图,列表网仓记录详情页面(form视图),编辑内联视图中的货主记录,为货主和仓库字段搜索,添加过滤 ...

  5. ctfshow-web入门-SSTI学习

    千万要仔细,不要拼错单词 千万要仔细,不要拼错单词 千万要仔细,不要拼错单词 web 361 payload name={{[].__class__.__base__.__subclasses__() ...

  6. Vulhub 漏洞学习之:ActiveMQ

    Vulhub 漏洞学习之:ActiveMQ 目录 Vulhub 漏洞学习之:ActiveMQ 1 ActiveMQ反序列化漏洞(CVE-2015-5254): 1.1 漏洞利用过程 2 ActiveM ...

  7. 【论文笔记】UNet

    语义分割的U-Net网络结构Unet是2015年诞生的模型,它几乎是当前segmentation项目中应用最广的模型.Unet能从更少的训练图像中进行学习,当它在少于40张图的生物医学数据集上训练时, ...

  8. ATC:一个能将主流开源框架模型转换为昇腾模型的神奇工具

    摘要:本文介绍了昇腾CANN提供的模型转换工具ATC,介绍了其功能.架构,并以具体样例介绍了该工具的基本使用方法以及常用设置. 本文分享自华为云社区<使用ATC工具将主流开源框架模型转换为昇腾模 ...

  9. PostgreSQL 按拼音排序 - convert to GBK/EUC_CN coding

    背景 国内的应用,在文本排序上基本都是按照拼音来进行排序的. 在不同的字符集中,汉字的编码可能不一样,比如UTF8和GBK,其中GBK是按拼音的顺序进行编码的,而UTF8则不是. 所以如果你的数据库使 ...

  10. webgl 系列 —— 绘制一个点(版本2、版本3、版本4、版本5)

    绘制一个点 我们初步认识了 webgl,本篇主要围绕绘制一个点的示例,逐步实现下面功能: 点的位置从 js 传入着色器 点的大小由 js 传入着色器 通过鼠标点击绘点 通过鼠标点击绘点,并改变点的颜色 ...