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

C语言中缀表达式转成后缀表达式,并计算它的值 在C语言中,将中缀表达式转成后缀表达式,并计算它的结果,具体的思路如下: 1、定义两个栈,numStack用于存放运算对象,最后存放运算结果的,fuStack用于存放运算符号的 2、从左到右遍历字符串 3、如果当前的字符是一个数字,那么先不要着急将其转成数字,然后压入到numStack中,因为考虑到多位数字的情况,所以需要从当前下标开始遍历,一直遍历到第一个运算符出现,那么这时候才可以将运算符前面的数字转成字符串。然后调用atoi,将字符串转成一个数字。这时候,将这个数字输出,同时将其压入到numStack 阅读详情

正常表达式是中缀表达式,转化成后缀表达式之后方便计算值。

需要注意的几点是。

1.栈空直接将运算符号入栈。

2.有元素,且栈顶元素优先级小于现有元素优先级,则放入,因为后边可能比改元素优先级还要高。

3.栈顶元素优先级大于或等于当前元素,那么,必然是前面的先算,因此可以循环控制,将前面的优先级大于或等于当前元素优先级的符号都输出。

4.控制左括号时,左括号进栈优先级降为最低。右括号进栈时,直接输出内部符号,直到碰到对应的左括号。

#include<bits/stdc++.h>
using namespace std;
struct Operator
{
    char op;
    int level;
};
stack<Operator>stk;
string s;
int main()
{
    while(cin>>s)
    {
        int pos=0;
        while(pos<s.size())
        {
            if(s[pos]>='0'&&s[pos]<='9') //如果是数字,那么把数字读全,然后输出这个数字
            {
                int temp=0;
                while(pos<s.size()&&(s[pos]>='0'&&s[pos]<='9'))
                {
                    temp*=10;
                    temp+=s[pos]-'0';
                    pos++;
                }
                cout<<temp<<" ";
            }
            else//如果是字符
            {
                Operator thisop;
                thisop.op=s[pos];
                if(s[pos]=='+'||s[pos]=='-')
                    thisop.level=1;
                else if(s[pos]=='*'||s[pos]=='/')
                    thisop.level=2;
                else if(s[pos]=='^')
                    thisop.level=3;
                else if(s[pos]=='('||s[pos]==')')
                    thisop.level=4;
                //根据操作符定义他们的等级
                if(stk.empty()){//如果栈空,直接进入,特判(
                    if(thisop.op=='(')
                       thisop.level=0;
                    stk.push(thisop);
                }
                else//非空则需要判断栈顶元素和当前元素的优先级
                {
                    Operator temp;
                    temp=stk.top();//获取栈顶的操作符号优先级
                    if(temp.level<thisop.level) //如果自身优先级比先前的大,那么继续先存着,因为不知道后边有没有比自身还要大的
                    {
                        if(thisop.op=='(')//左括号入队之后优先级降低成最低
                            thisop.level=0;
                        else if(thisop.op==')')//右括号不入栈,直接把从右括号到左括号中间的元素全部操作完
                        {
                            while(stk.top().op!='(')
                            {
                                cout<<stk.top().op<<" ";
                                stk.pop();
                            }
                            stk.pop();
                        }
                        if(thisop.op!=')')
                            stk.push(thisop);
                    }
                    else  //现在的操作符小于先前的,那么必然是先前的先输出
                    {
                        while(!stk.empty()&&stk.top().level>=thisop.level){
                            cout<<stk.top().op<<" ";
                            stk.pop();
                        }
                        stk.push(thisop);
                    }
                }
                pos++;
            }

        }
        while(!stk.empty()){
            cout<<stk.top().op<<" ";
            stk.pop();
        }
        cout<<endl;
    }
    return 0;
}


高等数学第五章---定积分(§5.3定积分的计算方法) 这篇博客详细讲解定积分的计算方法,包括直接法、凑微分法、变量代换法和分部积分法。通过典型例题演示如何运用这些技巧计算定积分,特别强调换元必换限的原则和奇偶函数的简化处理。内容涵盖代数变形、三角代换、分段函数积分等常见题型,并附有详细的解题步骤和常见错误分析。适合微积分学习者系统掌握定积分计算技巧,提升解题效率。文中还包含积分等式证明和变限积分函数求导等进阶内容,帮助读者深入理解定积分的应用。 阅读详情

相关推荐

linux redis7 完整的集群搭建过程

一。安装: 1.1 说明: Redis官方只提供了源码,并没有提供经过编译之后的安装包。 因此,安装Redis,要先编译、后安装。(即源码安装方式) 注意:需要联网安装 1.2 安装编译的工具: yum install gcc gcc-c++ -y 1.3 下载tar包,上传到linux服务器,解压配置环境变量 1.4 cd +解压的目录下:编译 make 注意:如果编译失败,请重新进行解压编译,...

m0_38028438的博客 719

中缀表达式转后缀表达式_前、中、后缀表达式

#前缀表达式(波兰表达式)前缀表达式又称为波兰式,前缀表达式的运算符位于操作数之前举例:(3+4)*5-6对应的波兰式是-*+3456前缀表达式的计算求值从右到左扫描表达式,将数字压入堆栈遇到运算符时,弹出栈顶的两个数,进行运算注意顺序为:栈顶元素 -操作符->次顶元素并将结果入栈;重复上述过程直到表达式最右端最后运算得出的值即为最终结果例如 (3+4)*5-6对应的波兰式是-*+3456从...

weixin_39890633的博客 187

【KDD2024】ShapeFormer:用于多元时间序列分类的Shapelet Transformer

多元时间序列分类(MTSC)因其在现实世界中的广泛应用而吸引了大量研究关注。最近,Transformer在MTSC中取得了先进的性能。然而,

m0_52597077的博客 4738

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

一、后缀表达式求值 后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6  5  2  3  + 8 * + 3  +  *,则其求值过程如下: 1)遍历表达式,遇到的数字首先放入栈中,此时栈如下所示: 2)接着读到“+”,则弹出3和2,执行3+2,计算结果等于5,并将5压入到栈中。 3)读到8,将其直接放入栈中。 4)读到“*”,弹出8和

__七把刀__ 17万+

ResNet改进(7):添加 SK注意力机制

实现 SK 注意力机制。

2401_82355416的博客 730

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1536

中缀表达式转后缀表达式

题目 代码 #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<cctype> #include<ctime> #include<iostream> #include<string> #includ...

kosf_的博客 201

全网最强AI辅助课题申报教程!超详细流程拆解,助你快速提高课题申报成功率(附各部分高效提示词)

实验法要详细说明自变量、因变量、实验类型、实验过程、实验步骤、测量工具名称、被试取样方式、无关变量控制方法。这个部分就是让评审专家相信我们有能力把这个项目干成,写的时候要重点突出两块内容:第一是研究基础,包括你或团队在相关领域已有的研究成果,比如发表的论文、承担过的课题、获得过的奖励、相关研究经验等,要具体、有说服力;课题申报专门给我们留了一小节用来突出课题的创新之处,不管是研究角度、研究对象、研究方法,还是应用价值都可以提炼作为我们的创新点,最后的语气成果也要明确具体,且要和课题内容紧密相关。

智能AI让学术科研更容易 665

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

1、需要使用两个栈,一个用于存放后缀表达式的中间结果(tempStack)和一个用于存放操作符(operStack); 2、扫描到"(",此时operStack为空,直接入栈 operStack => "(" 3、扫描到"3",数字直接入栈tempStack tempStack => "3" operStack => "(" 4、扫描到"+",优先级大于operStack栈顶元素的优先级,直接入栈operStack tempStack => "3" operStack => "(","+" 5、扫描到"4

Chaixf8的博客 527

SAP物料主数据中的销售视图。这是一个在销售与分销模块中至关重要的核心主数据,直接关系到从报价到交货的整个销售流程

SAP物料主数据的销售视图是销售流程的核心基础,它定义了物料如何被销售、定价、开票和交付。销售视图包含五个关键控制点:1)基本销售数据控制物料销售状态;2)销售组织数据决定销售渠道和产品分类;3)通用物料数据管理销售描述和税务分类;4)交货计划控制交付参数;5)开票计划管理定价规则。这些设置直接影响销售流程顺畅度、数据准确性、客户满意度、财务合规性和业务灵活性。建议将销售视图创建纳入新产品引入流程,并建立规范的维护机制,确保业务变化时及时更新配置。

金牌架构师 666

《二、企业级监控系统之Prometheus监控node_exporter》

文章目录一、部署node_exporter服务二、部署prometheus服务2.1、部署node_exporter服务三、grafana之添加数据源四、grafana之导入监控模板五、grafana之修改模板变量六、grafana之修改仪表板变量总结 > 这里是引用 一、部署node_exporter服务 docker run -d --restart=always --name node_exporter --net=“host” --pid=“host” -v “/:/host:ro,

东城绝神 1万+

前缀中缀后缀表达式以及使用后缀表达式完成计算

7.5 前缀,中缀,后缀表达式(逆波兰表达式) 7.5.1 前缀表达式(波兰表达式) 前缀表达式又称波兰表达式,前缀表达式的运算符位于操作数之前 举例说明:(3 + 4) X 5 - 6 对应的前缀表达式就是 - X + 3 4 5 6 7.5.1.1 前缀表达式的计算机求值 从 右至左扫描 表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对他们左相应的计算(堆顶元素 和 此顶元素), 并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果 例如:(3+

weixin_52725999的博客 1041

嵌入式Linux&Android开发-TP调试

目录 一、修改DTS,添加新的I2C设备 二、修改Makefile,Kconfig 三、tp调试时的问题排查 一、修改DTS,添加新的I2C设备 &i2c4 { status = "okay"; clock-frequency = <400000>; gslX680@40 { compatible = "gslX680"; reg = <0x40>; touch-gpio = <&gp

嵌入式成长手册 570

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

中缀表达式 将运算符写在两个操作数中间的表达式 eg: (6+3*(7-4))-8/2 后缀表达式 将运算符写在操作数之后, 逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式 eg: 6 3 7 4 - * + 8 2 / - 前缀表达式 将运算符写在两个操作数之前的表达式 eg: - + 6 * 3 - 7 4 / 8 2 中缀表达式转换成后缀表达式 eg. (6+3*(7-4))-8/2 1.直接转换法 确定表达式的运算方式, 加括号, 给每一次能

zm_miner的博客 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据结构——编程实现中缀表达式转成后缀表达式

计算机运算过程:计算机逐个遍历,直到遍历到运算符,遍历到运算符后将该运算符的前两个操作数(双目运算符)进行运算。3 4 2 *+2 1 1 +/ -5+下一步为3 8 + 2 2 / - 5 +举例:3+4*2-2/(1+1)+5=3+8-1+5=15。转成后缀表达式为:3 4 2 *+2 1 1 +/ -5+后缀表达式:运算符在操作数的后面 例如3 4+,3 4*中缀表达式:运算符在操作数中间 例如3+4,3*4。中缀表达式 :3+4*2-2/(1+1)+5。把运算符放在对应括号的后面。

duxinran的博客 886

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

中缀表达式转成后缀表达式,以及后缀求值

/************************************************************ *中缀表达式转成后缀表达式计算后缀表达式 *使用数组栈完成 *问题描述: 输入一个中缀表达式: a+b*c+(d*e+f)+g,转成后缀表达式 *算法: 1.如果是数字,则直接输出; 2.如果是计算符或者括号,则利用栈判断选择何种操作 2.1

putaoxiangqi的专栏 616

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

中缀表达式转成后缀表达式(含java实现的具体代码)

已转到:http://www.wypblog.com/archives/161             后缀表达式又叫做逆波兰表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。          运用后缀表达

过往记忆大数据 1万+

中缀表达式转成后缀表达式的简单求值(Java实现)

后缀表达式简介 后缀表达式又叫做逆波兰表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。 运用后缀表达式进行计算的具体做法: 从左到右扫描算术表达式,将遇到的操作数直接存放到后缀表达式中,将遇到的...

中年人 1190

中缀表达式转成后缀表达式 C实现

2015年05月13日 21:26:20 这几天看数据结构一直都说一个中缀转后缀的问题!今天我就来实现一下!这个只是当作交流与启蒙。但是也算是心血,有不足的地方欢迎指出!谢谢大家! 要实现这个程序其实只要抓住两点:1、遇到操作数立即输出! 2、遇到操作符立即压栈一直当遇到优先级比自己低或者同级的!(括号需特别处理!); 废话不说,上源码! #include /*

Darkness_hades的博客 4854

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

#include #include #include using namespace std; const int MAXSIZE = 100; typedef char Datatype; typedef struct{ int top; Datatype data[MAXSIZE]; }Seqstack, *pSeqstack; pSeqstack init(void) { pSe

cysqyh的博客 453

【C++ 栈】c++栈解决中缀表达式转成后缀表达式

栈:c++解决中缀表达式转成后缀表达式1.题目2.思路3.代码 1.题目 输入样例 1+2 * 3 输出样例 123 *+ 2.思路 1.若为最高级的运算符,入栈; 2.若为 “(”,入栈; 3.若为“)”,则把栈中的的运算符加入后缀表达式中,直到 “(”,从栈中删除“(”; 4.若为+,-运算符,先判断栈顶元素是否为更*,/,如果是则输出栈元素。 5.若为(,*,/直接入栈。 3.代码 #include<bits/stdc++.h> using namespace std; int

qq_40802813的博客 320

c++通过栈将中缀表达式转成后缀表达式

#include #include using namespace std; //栈外优先级 int getBeforeIn(char op){ switch(op){ case '+': case '-': return 2; case '*': case '/': case '

renlei0109的专栏 1003

中缀表达式转成后缀表达式(逆波兰表达式),并实现简单的计算器

中缀表达式转成后缀表达式,并用后缀表达式实现加减乘除的计算

weixin_46048110的博客 1185
上一篇: 螺旋矩阵
下一篇: 数据结构复习——二叉树的几个基本操作
Linnnnnger
博客等级 码龄11年 71粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值