栈的表达式之计算中缀、前缀和后缀表达式

栈经典问题之前缀、中缀、后缀表达式 定义中缀表达式是一个通用的算术逻辑表示法,是最常见的一种表达式,如5*(2+3)-4;前缀表达式是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操作数写在后面,如上述表达式的前缀表示为- * 5 + 2 3 4后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行,上述表达式的后缀表示为5 2 3 + * 4 -中缀、前缀、后缀表达式 阅读详情

1.计算中缀表达式

//判断运算符优先级
int getPriority(char op)
{
	if(op=='+'||op=='-')
		return 0;
	else 
		return 1;
} 
//计算表达式
int calsub(float opnd1,char op,float opnd2,float &result)
{
	if(op=='+')
		result=opnd1+opnd2;
	if(op=='-')
		result=opnd1-opnd2;
	if(op=='*')
		result=opnd1*opnd2;
	if(op=='\')
	{
		if(fabs(opnd2)<MIN)
			return 0;
		else
			result=opnd1/opnd1;
	}
	return 1;
} 
//计算栈
int calstack(float s1[],int &top1,float s2[],int &top2)
{
	float opnd1,opnd2;char op;
	int flag;
	op=s1[top1--];
	opnd2=s2[top2--];
	opnd1=s2[top2--];
	flag=calsub(opnd1,op,opnd2,result);
	s2[++top2]=result;
	return flag;
} 
float calinfix(char exp[])
{
	char s1[maxsize];int top1=-1;
	char s2[maxsize];int top2=-1;
	int i=0;
	while(exp[i]!='\0')
	{
		if(exp[i]>='0'&&exp[i]<='9')
		{
			s2[++top2]=exp[i];
			i++;
		}
		else if(exp[i]=='(')
		{
			s1[++top1]=exp[i];
			i++;
		}
		else if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='\')
		{
			if(top1==-1||s1[top1]=='('||getPriority(exp[i])>getPriority(s1[top1]))
			{
				s1[++top1]=exp[i];
				i++;
			}
			else
			{
				//计算
				int flag=calstack(s1,top1,s2,top2);
				if(flag==0)
					return 0; 
			}
		}
		else if(exp[i]==')')
		{
			while(s1[top1]!='(')
			{
				//计算
				int flag=calstack(s1,top1,s2,top2);
				if(flag==0) 
					return 0;
			}	
			--top1;
			++i;
		} 
	}
	while(top1!=-1)
	{
		//计算
		int flag=calstack(s1,top1,s2,top2);
		if(flag==0)
			return 0; 
	}
	return s2[top2];
}

2.计算后缀表达式(次顶 op 栈顶)

float calPostFix(char exp[])
{
	float s[maxsize];int top=-1;
	for(int i=0;exp[i]!='\0';i++)
	{
		if('0'<=exp[i]&&exp[i]<='9')
			s[++top]=exp[i]-'0';
		else
		{
			float opnd1,opnd2,result;
			char op;int flag;
			opnd2=s[top--];op=exp[i];
			opnd1=s[top--];
			flag=calsub(opnd1,op,opnd2,result);
			if(flag==0)
			{
				cout<<"error"<<endl;
				break;
			}
			s[++top]=result;
		}
	}
	return s[top];
}

3.计算前缀表达式(栈顶op次顶)

float calPreFix(char exp[],int len)
{
	float s[maxsize];int top=-1;
	for(i=len-1;i>=0;i--)
	{
		if('0'<=exo[i]&&exp[i]<='9')
			s[++top]=exp[i]-'0';
		else
		{
			float opnd1,opnd2,result;
			char op;
			int flag;
			opnd1=s[top--];
			opnd2=s[top--];
			flag=calsub(opnd1,op,opnd2,result);
			if(flag==0)
			{
				cout<<"error"<<endl;
				break;
			}	
			s[++top]=result;
		}
	}
	return s[top];
}

 

考研数据结构2 | 使用 C++ 实现顺序栈 | 栈的基本应用之计算后缀表达式 本篇回顾了栈的概念,介绍了三种不同的表达式以及特点,阐述了后缀表达式计算的方法,并使用顺序栈实现后缀表达式。 阅读详情

相关推荐

栈实现中缀表达式计算

中缀表达式的计算程序,手动实现运算数栈和运算符栈。

数据结构基础与算法图解(3)—— 栈

文章目录3. 栈3.1 栈的逻辑结构3.1.1 例题3.2 栈的顺序存储表示3.2.1例题3.3 栈的应用3.3.1 编辑命令行3.3.1.1 例题3.3.2 数值转换3.3.3 括号匹配3.3.3.1 例题3.3.4 迷宫求解3.3.5 表达式求值3.3.5.1 前缀表达式3.3.5.2 中缀表达式3.3.5.3 后缀表达式3.4 用栈实现递归3.5八皇后问题3.6 四色问题 3. 栈 3.1 栈的逻辑结构 栈是限定插入和删除只能在“固定端”进行的线性表。 ADT Stack{ 数据对象:

zyw2002的博客 889

某音播放量查询,播放量接口研究,最新版本抓包,修改SO文件绕过SSL

本教程适用于某音27.8,64位版本,32为版本及某音旁侧版本修改方法大同小异,部分旁侧版本修改之后模拟器可能无法抓包,真机测试均可正常抓包,此方法修改后绝大部分包可以正常抓取,但部分包无法抓取,例如验证码,内置浏览器功能,如需抓取此类包可通过 Postern + Charles 实现。

byalipus的博客 1万+

运用栈计算中缀表达式

本篇概述下运用栈(stack),将中缀表达式(infix expression)转换成后缀表达式(postfix expression),并运算结果。 1. 后缀表达式的运算。 使用栈运算后缀表达式,是最合适不过了。我们用一个简单的例子来简要Demo下。 (string/char*) 2 3 5 *...

694

基于AR和SLAM技术的商场智能导视系统技术原理详解

本文针对智慧商场室内导航需求,提出基于AR和SLAM技术的商场智能导视系统技术方案,实现了沉浸式导览体验并促进消费转化,助力商场运营升级。

维小帮定位导航的博客 1243

储能变流器(Power Control System——PCS)设计原理

储能变流器(Power Control System——PCS)可控制蓄电池的充电和放电过程,进行交直流的变换,在无电网情况下可以直接为交流负荷供电。PCS 由 DC/AC 双向变流器、控制单元等构成。PCS 控制器通过通讯接收后台控制指令,根据功率指令的符号及大小控制变流器对电池进行充电或放电,实现对电网有功功率及无功功率的调节。 PCS 控制器通过 CAN 接口与 BMS 通讯,获取电池组状态信息,可实现对电池的保护性充放电,确保电池运行安全。   储能变流器(PCS)可控制蓄电池的充电和放电过程,进

Zhouengineer的博客 5万+

用栈解决中缀表达式

中缀表达式是一种数学表达式的表示方法,其中操作符位于两个操作数的中间。

Xioaxiang_的博客 849

华为eNSP Pro实战:NE/CE设备SSH远程配置避坑指南

本文针对华为eNSP Pro用户在模拟多台NE路由器或CE交换机时遇到的浏览器卡顿问题,提供了详细的SSH远程配置避坑指南。通过对比浏览器与SSH客户端的资源占用和操作体验,文章详细阐述了为NE和CE设备配置SSH服务的关键步骤、命令差异及常见错误排查方法,旨在帮助用户提升实验效率,实现稳定高效的远程管理。

weixin_29196891的博客 223

栈的应用—前、中、后缀表达式

中缀表达式:运算符在两个操作数中间 前缀表达式:运算符在两个操作数前面(两个操作数的左右顺序不能颠倒) 后缀表达式:运算符在两个操作数后面 中缀表达式转后缀表达式的手算方法: 客观来说两种计算结果都正确,但是计算机算法计算的结果为前者,所以依据“左优先”原则得到的结果可以和计算机算法计算的结果相同,推荐使用左边计算方法即依据左优先原则。 左优先原则计算得到的后缀表达式中计算符从左到右的顺序和依据左优先原则的中缀表达式中的计算符的计算顺序相同。 后缀表达式的计算: 手算: 注意两个操作数的左右顺序.

weixin_47511190的博客 1119

如何选择汽车域控制器MCU?一文看透7大关键维度[特殊字符](含芯片推荐、踩坑预警)

MCU选型 Checklist(实用表格)维度你需要考虑的问题Flash/RAM我的任务栈够吗?是否支持OTA双Bank?安全等级这功能出故障会不会危及人命?接口资源够几个CAN?支持CAN FD?ETH是否支持TSN?主频我的软件响应周期是多少?是否带Cache?多核架构是SMP/AMP?是否带锁步核?跑多个任务会不会互相干扰?功耗与封装睡眠电流够低?有外扩DDR空间?BGA能焊?供应链有无国产替代?交期是否稳定?支持AUTOSAR吗?

weixin_43199439的博客 662

基于AI的智能开发环境—Trae在Web开发中的应用实战与性能评估【Trae项目实战】

Trae 是一款与 AI 深度集成的开发工具,提供智能问答、代码自动补全和基于 Agent 的 AI 自动编程能力,极大提升开发效率。它具备完备的 IDE 功能,如代码编写、项目管理和源代码管理等,同时还具备强大的 AI 助手,能够提供智能问答、实时代码建议、代码片段生成等服务。开发者可以通过自然语言与 AI 协作,从 0 到 1 开发项目,AI 会根据需求自动生成代码或创建文件。

一键难忘的博客 3万+

前_中_后缀表达式的相互转化与计算

文章目录 一、定义 前缀表达式 中缀表达式 后缀表达式 二、相互转换 1.转换注意 2.读入数据 三、计算机计算求值 总结 一、定义 1. 前缀表达式(波兰) 所有的符号都是在要运算的操作数字的前面出现。例如 /++ab*cde 2.中缀表达式 所有的符号都是在要运算的操作数字的中间出现。例如(a+b+c*d)/e 3.后缀表达式(逆波兰) 所有的符号都是在要运算的操作数字的后面出现。例如 abcd*++...

qq_35284646的博客 5656

QT实现计算器(C/C++)

digitClicked()槽函数用于处理数字按钮的点击事件,operatorClicked()槽函数用于处理运算符按钮的点击事件,equalsClicked()槽函数用于处理等号按钮的点击事件。在operatorClicked()槽函数中,我们获取被点击按钮的文本作为当前运算符,并将文本框中的内容转换为双精度浮点数,存储为操作数1。在上述代码中,我们添加了一个私有成员变量m_operand1,用于存储第一个操作数的值,以及一个私有成员变量m_currentOperator,用于存储当前运算符的值。

CyberNova的博客 385

【数据结构与算法】【12】前缀表达式、中缀表达式、后缀表达式

什么是前缀表达式、中缀表达式、后缀表达式前缀表达式、中缀表达式、后缀表达式,是通过树来存储和计算表达式的三种不同方式以如下公式为例(a+(b−c))∗d( a+(b-c) )*d(a+(b−c))∗d通过树来存储该公式,可以表示为 那么问题就来了,树只是一种抽象的数据结构,它必须要通过某个形式的文本来才能存储和输入此时,就有了三种表示方法:前缀表达式、中缀表达式、后缀表达式它们分别相当于树的前序遍历、中序遍历、后序遍历,前中后指的是遍历时符号的遍历顺序前序遍历:符号 - 左操作数 - 右操作数中序遍历:左操

天天向上 Up Up Up (*^▽^*) 2万+

使用Simulink进行无刷电机霍尔传感器信号处理电路的仿真

位置检测:霍尔传感器可以检测转子的位置,这对于实现无刷电机的电子换向至关重要。提高效率:通过准确的位置信息,可以优化电机的工作状态,提高效率和性能。通过上述步骤,我们简要介绍了如何基于Simulink实现无刷电机霍尔传感器信号处理电路的仿真。

MHD0815的博客 431

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

前缀、中缀、后缀表达式

1. 前缀、中缀、后缀表达式 前缀、中缀、后缀表达式是对表达式的不同记法,其区别在于运算符相对于操作数的位置不同,前缀表达式的运算符位于操作数之前,中缀和后缀同理。 举例: 中缀表达式:1 + (2 + 3) × 4 - 5 (平时我们书写的均为中缀表达式) 前缀表达式:- + 1 × + 2 3 4 5 后缀表达式:1 2 3 + 4 × + 5 - 中缀表达式 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。 虽然人的大脑很容易理解与

当一个合格的软件工程师 3937

Devexpress16.2.6破解工具

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

前缀,中缀,后缀表达式的转化和计算

前缀,中缀,后缀表达式的转化和计算

weixin_51049319的博客 824

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

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

前缀 中缀 后缀表达式

转载自 1. 中缀表达式 ==(3 + 4) × 5 - 6 == 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。 虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。 2...

Javaer`s blog 393

JAVA 数据结构之栈与前缀中缀后缀(逆波兰表达式)实现计算器

目录结构 1.JAVA中栈的实现 数组实现 链表实现 JAVA自带Stack类 2.计算器的实现 中缀表达式(人脑熟悉) 前缀表达式(波兰表达式) 后缀表达式(逆波兰表达式) 常用 3.中缀转后缀 JAVA中栈的实现 1.数组实现 定义类ArrayList,模拟栈 此类具有三个属性: private int maxSize; //栈大小 private int[] stack; //实现栈所用的数组 在构造方法中初始化 private int top=-1; //栈顶指针,初始值为-1

qq_43522419的博客 725

中缀表达式转化成前缀、后缀表达式

1、如何将中缀表达式转化成后缀表达式呢?(计算机中用的就是后缀表达式) 利用两个栈S1,S2:其中S1存放操作符,S2存放操作数 从左往右遍历中缀表达式,如果遇到数字,则放入S2中,如果遇到操作符,则放入S1中。在放操作符的时候有一定的规则,如果栈为空或栈顶元素为(,则直接压栈。如果是(,也直接压栈;如果栈顶元素为普通操作符,则比较优先级,如果待压栈的操作符比栈顶操作符优先级高,则直接压栈,否...

u013962307的博客 4458

使用栈计算前缀表达式

介绍了怎样将中缀表达式转换为前缀表达式,并利用栈数据结构计算前缀表达式

guishangppy的博客 1628

Java数据结构和算法(六)——前缀、中缀、后缀表达式

目录 1、人如何解析算术表达式 2、计算机如何解析算术表达式 3、后缀表达式   ①、如何将中缀表达式转换为后缀表达式?   ②、计算机如何实现后缀表达式的运算? 4、前缀表达式   ①、如何将中缀表达式转换为前缀表达式?   ②、计算机如何实现前缀表达式的运算?     前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序...

尚拙的博客 270

【计算机科学】理解前后缀表达式及其应用

在计算机科学中,前后缀表达式是非常常见的运算符表示法,尤其在编译原理、计算器实现、表达式求值等领域中有着广泛应用。本文将深入介绍前后缀表达式的基本概念、作用、实现思路,帮助你全面理解前后缀表达式的应用和实现。

XuanRan的博客 3463

中缀表达式(自然表达式)转前缀表达式(波兰表达式)、后缀表达式(逆波兰表达式)

表达式1.中缀表达式:2.前缀表达式:2.1中缀表达式转前缀表达式:2.2前缀表达式计算:3.后缀表达式:3.1中缀表达式转后缀表达式:3.2后缀表达式计算: 1.中缀表达式: 常见的表达式,例如:(3+4)*4-7; 2.前缀表达式: 前缀表达式的运算符位于操作数之前 例如:-*+123; 2.1中缀表达式转前缀表达式: 1.初始化两个栈:运算符栈s1,储存中间结果的栈s2 2.从右至左扫描中缀表达式 3.遇到操作数时,将其压入s2 4.遇到运算符时,比较其与s1栈顶运算符的优先级 4.1如果s1为空,

Jiashun Hao的博客 720

Java栈结构的基本实现&前缀,中缀,后缀表达式的转化和计算

Java栈结构的基本实现&前缀,中缀,后缀表达式的转化和计算

ILFFQ的博客 656

使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

文章目录背景知识表达式转换问题(考研经典)一:手工转换(1)中缀转前缀和中缀转后缀(2)前缀转中缀和后缀转中缀二:用栈实现表达式转换(1)中缀转后缀(2)中缀转前缀 背景知识 中缀表达式:a+b 前缀表达式(波兰式):+ab 后缀表达式(逆波兰式):ab+ 表达式转换问题(考研经典) 一:手工转换 考研中有一类经典的问题就是表达式的转换问题,经常要把一个类型的表达式转换为另一个类型的表达式 所以这里我们主要说一下中缀转前缀,前缀转中缀,中缀转后缀和后缀转中缀即可。这样这三种形式任意两个之间的转换都可以借助

快乐江湖的博客 938
上一篇: 栈的应用之表达式转换
下一篇: 栈的应用之设计共享栈
mind_programmonkey
mind_programmonkey 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄9年 4435粉丝 1111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值