中缀表达式转换成后缀表达式

后缀表达式相关,包括中缀表达式转后缀表达式以及后缀表达式的运算 (1) 从键盘或文件读入一个合法的算术表达式,输出相应的后缀表达式。后缀表达式中,数据与数据之间加分隔符; (2) 输出正确的计算结果,保留两位小数点; (3) 考虑算法的健壮性,当表达式错误时,要给出错误提示 (4) 可以连续输入,即输入完一个表达式,转换和计算完成后可以提示用户继续输入表达式,直到用户输入一个“#”则退出程序。 立即下载
import java.util.Stack;
public class test02 {
	/*
	 * 题目:将一个标准表达式转换成后缀式
	 * 输入:a+b*c+(d*e+f)*g
	 * 输出:abc*+de*f+g*+
	 * 算法:   (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;
			(2) 从左至右扫描中缀表达式;
			(3) 遇到操作数时,将其压入S2;
			(4) 遇到运算符时,比较其与S1栈顶运算符的优先级:
				(4-1) 如果S1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;
				(4-2) 否则,若优先级比栈顶运算符的高,也将运算符压入S1(注意转换为前缀表达式时是优先级较高或相同,而这里则不包括相同的情况);
				(4-3) 否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比较;
			(5) 遇到括号时:
				(5-1) 如果是左括号“(”,则直接压入S1;
				(5-2) 如果是右括号“)”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到左括号为止,此时将这一对括号丢弃;
			(6) 重复步骤(2)至(5),直到表达式的最右边;
			(7) 将S1中剩余的运算符依次弹出并压入S2;
			(8) 依次弹出S2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式(转换为前缀表达式时不用逆序)
	 */
	/**
	 * 优先级比较
	 * @param operator1 比较值
	 * @param operator2 被比较值
	 * @return 小于等于返回false,大于返回true
	 */
	public  static boolean comparePrior(String operator1, String operator2) {
		if("(".equals(operator2)) {
			return true;
		}
		if ("*".equals(operator1) || "/".equals(operator1)) {
			if ("+".equals(operator2) || "-".equals(operator2)) {
				return true;
			}
		}
		return false;
	}
	public static void qianTohou(String[] str){
		Stack<String> numStack = new Stack<String>();
		Stack<String> chStack = new Stack<String>();
		for(int i = 0;i < str.length;i++){
			if ("(".equals(str[i])) { // 如果是左括号,则入栈
				chStack.push(str[i]);
			} 
			else if ("+".equals(str[i]) || "-".equals(str[i]) || "*".equals(str[i]) || "/".equals(str[i])) {
				//如果存储运算符号的栈时空或者如果栈值优先级小于要入栈的值,则继续压入栈
				if(chStack.empty()||comparePrior(str[i], chStack.peek())) { 
					chStack.push(str[i]);
				} else {  //否则取出值
					numStack.push(chStack.pop());
					//chStack栈栈顶更新了数据,接着用Str[i]与之进比较
					i--;
				}
			} else if (")".equals(str[i])) { //如果是")",则出栈,一直到遇到"("
				while (!chStack.empty()) {
					String s = (String) chStack.pop();
					if (!"(".equals(s)) {
						numStack.push(s);
					} else {
						break;
					}
				}
			} else {
				numStack.push(str[i]);
			}
		}
		while(!chStack.empty()) //可能此时chStack栈中还有没输出的项
		{
			numStack.push(chStack.pop());
		}
		System.out.println(numStack);
	}
	public static void main(String[] args) {
		String[] str = {"a","+","b","*","c","+","(","d","*","e","+","f",")","*","g"};
		qianTohou(str);	
	}

}
结果:输出

c语言实现中缀表达式转后缀并求值 c语言实现中缀表达式转后缀表达式并求得计算结果,用顺序栈结构。 当输入者输入错误信息的时候需要报错,并说明错误的种类。 立即下载

相关推荐

从中缀向后缀转换表达式

问题描述   中缀表达式就是我们通常所书写的数学表达式,后缀表达式也称为逆波兰表达式,在编译程序对我们书写的程序中的表达式进行语法检查时,往往就可以通过逆波兰表达式进行。我们所要设计并实现的程序就是将中缀表示的算术表达式转换成后缀表示,例如,将中缀表达式 (A 一 (B*C 十 D)*E) / (F 十 G ) 转换为后缀表示为: ABC*D十E*—FG十/ 注意:为了简化编程实现,假定变量名均为单个字母,运算符只有+,-,*,/ 和^(指数运算),可以处理圆括号(),并假定输入的算术表达式正确。 要求:使用栈数据结构实现 ,输入的中缀表达式以#号结束 输入 整数N。表示下面有N个中缀表达式 N个由单个字母和运算符构成的表达式 输出 N个后缀表达式。

中缀表达式转后缀表达式详解

深入讲解中缀表达式转后缀表达式的基本原理与实现代码

罅隙的博客 2万+

F5 Shape逆向工程实战:从美西南航空到xbk的风控突破

本文以美西南航空和xbk为例,深入剖析了F5 Shape风控系统的逆向工程实战。文章拆解了其核心防线,包括通信加密、JSVMP逆向分析和无孔不入的环境指纹检测,并分享了定位Header生成入口、模拟算法输出及构建真实浏览器环境的系统性方法与思路,为合规的技术研究与测试提供参考。

weixin_29327525的博客 1388

中缀表达式求值练习

中缀表达式求值练习

PKU_ZZY的博客 1434

2.4G板载PCB IFA天线仿真设计

本文简单介绍下2.4GHz的板载PCB IFA天线的HFSS仿真与设计。

射频问问 (RFASK.NET) 是在"微波射频网(MWRF.NET)”系列原创技术专栏基础上升级打造的技术问答学习平台。 6012

DPO(Direct Preference Optimization)直接偏好优化

本文介绍了DPO(直接偏好优化)方法,该方法通过简化传统的RLHF(基于人类反馈的强化学习)流程,直接利用人类偏好数据进行模型优化。DPO的核心思想是跳过奖励模型训练和强化学习交互步骤,通过数学推导将优化目标转化为仅与策略概率分布相关的形式。推导表明最优策略与奖励模型之间存在显式关系,从而可以构建直接优化策略的损失函数。与RLHF相比,DPO简化了训练流程,提高了工程实现稳定性,同时保持了同等效果。

TeenLucifer的博客 1954

将中缀表达式转换成后缀表达式并求值(栈)

中缀表达式转换成后缀表达式需要用到的是数据结构中的一种——栈。 中缀表达式 : 生活中进行正常加减乘除计算的表达式。如2+(3*4-6/2)。也就是算术表达式 后缀表达式 :也叫逆波兰表达式。只有运算符和数字没有括号,运算符的先后顺序存在优先级的关系。如: 234*62*2+ 。 (由于需要处理字符串的原因,目前只有个位数的算术运算) 给出的算术表达式通过代码实现很难计算出来,而转换成了后缀表达式的就很容易实现出来了。 当然,以下代码是很容易的出计算结果的。 public class Main

tanxinji的博客 4563

调试GMS应用,报错“此设备未获得play保护机制认证”问题解决

不少同学在调试GMS相关应用时,需登录Google账号,有时会弹出如下通知。Google登录界面也会出现如下提示这个报错的原因是设备未通过Google认证,google服务器未配置荣耀设备的型号白名单导致国内网页有一些指导方法在鸿蒙\荣耀的设备上消除这个提示,但本质的问题没有解决,无法登录Google账号。

胡同老道的博客 2万+

将中缀表达式转换成后缀表达式Java版

将中缀表达式转换成后缀表达式Java版

qq_64431576的博客 743

卡尔曼滤波与目标追踪

卡尔曼滤波与目标追踪为什么要学卡尔曼滤波?卡尔曼滤波是什么?一些概率论的知识基础卡尔曼滤波完整推导状态估计计算卡尔曼增益预测和更新 卡尔曼滤波部分我打算分三节(三次博客的内容): 卡尔曼滤波与行人状态估计 扩展卡尔曼滤波(EKF)与传感器融合 过程模型,无损卡尔曼滤波(UKF)与车辆状态轨迹 为什么要学卡尔曼滤波? 卡尔曼滤波以及其扩展算法能够应用于目标状态估计,如果这个目标是行人,那么就是行人状态估计(或者说行人追踪),如果这个目标是自身,那么就是车辆自身的追踪(结合一些地图的先验,GPS等数据的话就

qq_43232556的博客 4171

自定义View系列教程04--Draw源码分析及其实践

通过之前的详细分析,我们知道:在measure中测量了View的大小,在layout阶段确定了View的位置。 完成这两步之后就进入到了我们相对熟悉的draw阶段,在该阶段真正地开始对视图进行绘制。按照之前的惯例,我们来瞅瞅View中draw( )的源码 public void draw(Canvas canvas) { final int privateFlags = mPriv

谷哥的小弟 2万+

3-6 中缀表达式转换成后缀表达式, 后缀表达式的计算

第一种方法的逻辑是我比较理得清的 法一: midS是存放中缀表达式的字符串,字符之间没有空格,suffiexS是存放后缀表达式的字符串,数字和字符之间都有空格 思路: 1.如果midS[i]是'(',直接压栈 2.如果是数字, 把完整数字复制到到midS中后加一个空格,读取完数字后要判断此时的midS[i]是否是'\0',如果是的话,break结束循环 3.如果是')',不停弹栈,把弹栈...

Lucky小黄人的博客 287

华为OD机试真题 新系统【查找温度记录统计信息】

华为OD机试 新系统真题【查找温度记录统计信息】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【查找温度记录统计信息】多语言题解。

qq_45776114的博客 486

中缀表达式转换成后缀表达式与后缀表达式的计算过程

1.中缀表达式转换成后缀表达式:        首先需要注意的是:中缀转后缀的结果并不唯一。例如:(a+b+c*d)/e是一个中缀表达式,ab+cd*+e/与abcd*++e/都是其后缀表达式。        转换方式:先根据中缀表达式的各操作符的优先级,以上面这个式子为例,将(a+b+c*d)这个括号里面的数看作是一个常数q,则整个式子成了q/e的形式,转换成后缀表达式为:qe/。然后再看q转换...

a_silly_coder的博客 1万+

保姆级教程:如何将仅限客户端使用的免费大模型(Gemini、Antigravity、Qwen Code、Kiro 等)转为任何应用可调用的 OpenAI 兼容标准接口

大模型 API 费用太贵?💸 这篇文章分享一个薅羊毛神器,能把 Gemini、Qwen Code、Kiro 等客户端专属的免费大模型转换成标准 OpenAI 兼容接口 🔌。支持多协议互转、账户池管理、Web 管理界面,Docker 一键部署,零成本调用 Claude Opus 4.5、Gemini 3 Pro 等高级模型 ✅

XiaoqiangClub的博客 1033

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python中缀表达式转后缀表达式_中缀表达式转换成后缀表达式

中缀表达式就是我们正常工作中写的表达式,如 a+(b-c)*d ,编译系统将中缀表达式改写 abc-d*+ ,这种运算符在操作数后面称为后缀表达式(也称逆波兰表达式)。如何实现转换的呢?这里做一下自己的理解及记录。利用栈来实现转换过程需要用到栈,这里用两个栈,stack 栈用来存放运算符,post 栈用来存放最后的后缀表达式。具体规则如下:从左到右扫描中缀表达式,若是操作数,直接存入 post 栈...

weixin_39637919的博客 1167

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

中缀表达式转换成后缀表达式及后缀表达式的运算

import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 四则运算 + - * / () * 1、由中缀到后缀 * 2、由后缀算结果 * User: yfzhangbin * Date: 13-12-26 * Time: 上午11:...

350

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

利用栈将中缀表达式转换成后缀表达式

文章出处 -----------------------------------------------------------------------------原文----------------------------------------------------------------------------- 目的:将中缀表达式(即标准形式的表达式)转换为后缀式。 例子:a +

学无止境 2736

将标准表达式(中缀表达式)转换成后缀表达式

什么是后缀表达式 后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。 例如: 这里我给出一个中缀表达式:a+bc-(d+e) 第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((a+(bc))-(d+e)) 第二步:转换前缀与后缀表达式 前缀:把运算符号移动到对应的括号前面 则变成了:...

qq_41183949的博客 1263

将中缀表达式转换成后缀表达式

我们人脑很容易理解中缀表达式,但是中缀表达式在计算机并不好计算,所有我们要将中缀表达式转换成后缀表达式,因为后缀表达式是很容易计算的。为什么要写一个这样的程序呢?原因是我一开始想写一个计算机,它能够将输入的表达式的值计算出来。一开始觉得这样子的程序应该是很简单的,然后开始动手写,开始写了之后才发现并不是那么简单。后来我知道了后缀表达式,才知道原来要这样子才能将表达式的值计算出来。 言归...

dgn19620的博客 315

中缀表达式转换成后缀表达式并求值

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

kkwant的博客 976
上一篇: 逆波兰表达式通过栈实现
下一篇: 遍历给定文件夹中的所有文件以及文件夹 P79
阿懒先生
博客等级 码龄15年 12粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值