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

【Note详细图解】中缀表达式如何转为后缀表达式?数据结构 中缀转后缀思路 初始化两个栈:运算符栈S1;操作数栈S2 从左向右扫描中缀表达式 遇到操作数时,将其压入到操作数栈S2 遇到运算符时,比较其与运算符栈S1栈顶运算符的优先级 如果运算符栈S1为空,或栈顶运算符为左括号“ ( ”,或者优先级比栈顶运算符的优先级较高,则直接将此运算符压入栈中 否则,将运算符栈S1中栈顶的运算符弹入并压到操作数栈S2中,再次进行与运算符栈S1栈顶运算符的优先级比较 遇到括号时,如果遇到了左括号“ (”,则直接压入运算符栈S1; 如果遇到右括号“ ) ”,则依次弹出运算符栈S1栈 阅读详情

1.中缀表达式转换成后缀表达式:

        首先需要注意的是:中缀转后缀的结果并不唯一。例如:(a+b+c*d)/e是一个中缀表达式,ab+cd*+e/与abcd*++e/都是其后缀表达式。

        转换方式:先根据中缀表达式的各操作符的优先级,以上面这个式子为例,将(a+b+c*d)这个括号里面的数看作是一个常数q,则整个式子成了q/e的形式,转换成后缀表达式为:qe/。然后再看q转换成后缀表达式,先去掉括号,这个相当于三个常数相加的形式,所以先将c*d转换成cd*,所以式子成了a+b+cd*的形式,然后加法直接放到式子后面去ab+cd*+结合前面的e/就是ab+cd*+e/这种形式。

2.后缀表达式的计算过程:

        这个才是今天记录的重点,今天只写上计算思路,具体代码实现,等把手头的事情忙完了再做。

        计算思路:这个需要使用栈的数据结构,当遇到数值的时候入栈,当遇到运算符的时候,连续出栈两次(即取栈最上面的两个数字),对这两个数字结合运算符进行计算,将第一次出栈元素放在操作符后面,第二次出栈元素放在操作符前面,使用中缀表达式的计算规则进行计算,将计算出的结果入栈。不断循环,直到后缀表达式中的元素全部进行了操作。

(这里特别想画一个图来进行说,这样会更加清晰直观,但是又懒得弄这个图,等之后有时间了再说吧)

例子:还是以ab+cd*+e/来进行说明:

        对这个式子进行扫描,

                第一个扫描到a,入栈

                接着扫描到b,入栈,

                接着扫描到+,先出栈一次,得b,再出栈一次得a,计算a+b得到q(第一次出栈的元素放在操作符后面,第二次出栈的元素放在操作符前面)

                将a+b的结果q入栈,(现在栈中只有q)

                继续扫描到c,入栈(现在栈中有c,q(左边为栈顶))

                继续扫描到d,入栈(现在栈中有d,c,q(左边为栈顶))

                继续扫描到*,先出栈一次,得d,再出栈一次,得c,计算c*d(原理同上)

                将c*d的结果p入栈,(现在栈中有p,q(左边为栈顶))

                继续扫描到+,先出栈一次,得p,再出栈一次得q,计算q+p(原理同上)

                将q+p的结果i入栈(现在栈中有i)

                继续扫描到e,入栈(现在栈中有e,i(左边为栈顶))

                继续扫描到/,先出栈一次,得e,再出栈一次,得i,计算i/e

                将i/e的结果m入栈(现在栈中只有m)

                后缀表达式扫描完毕,现在的栈顶元素就是最终答案。

C++算法计算表达式(中缀表达式转后缀表达式) 算法:中缀表达式转后缀表达式(想看全部代码直接翻到底部) 众所周知,在编程里面,直接用中缀表达式求值是不方便的,so咱们将中缀转化为后缀再求值。 平时咱们使用的表达式为中缀表达式: 如:a+b*(c-d); 运算符本身具有优先级,存在括号优先级,编程时考虑的情况多样,代码也...... 阅读详情

相关推荐

后缀表达式(4)-——中缀表达式到后缀表达式的转换,递归实现

本篇是介绍的是后缀表达式最难,也是最基本的一个问题。即如何将一个中缀表达式转化为后缀表达式。在网上可以找到许多非递归实现的示例代码,它们比本节介绍的代码要简洁且高效,可是不利于理解。本节舍近求远,介绍后缀表达式的递归实现方式,为的是把变换的中心思想解释清楚。 问题描述 输入: 是一串字符串,它表示的是包含加减乘除四则运算以及括号运算的中缀表达式。为了简单起见,我们假设表达式中的

汪星人来地球的博客 3920

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

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

罅隙的博客 2万+

Docker部署OnlyOffice踩坑实录:解决editor.bin下载失败的3种姿势

本文详细解析了Docker部署OnlyOffice时editor.bin下载失败的常见原因,并提供了三种核心解决方案。重点剖析了容器网络配置、Nginx反向代理(特别是proxy_pass设置)以及安全策略调整,帮助开发者彻底解决静态资源加载问题,确保文档协作平台稳定运行。

weixin_29281941的博客 871

中缀表达式转后缀表达式

一、中缀表达式和后缀表达式的区别: 中缀表达式就是我们通常认知中的表达式,比如1+((2+3)*4)-5,这样的表达式虽然容易被人所理解,但是不容易被机器所识别,为此推出了后缀表达式。 后缀表达式又被叫做逆波兰表达式,逆波兰表达式不需要被括号所识别,且容易被机器识别。 二、中缀表达式转后缀表达式的过程: 我们随意的拟定一个中缀表达式,比如:1+5*(3+2)-4*5; 我们对中缀表达式进行一步一步转换,转换方式如下: 1、遇到操作数时直接加入集合 2、遇到操作符,与栈顶操作符比较优先级   2.1、如果

qq_49169308的博客 1万+

Elsevier期刊LaTeX双栏模板(cas-dc)实战:从Overleaf配置到投稿全流程

本文详细介绍了Elsevier期刊LaTeX双栏模板(cas-dc)在Overleaf平台上的配置与使用全流程,包括模板结构解析、标题与作者信息规范、摘要与关键词特殊格式、正文写作技巧、参考文献管理以及投稿前检查清单。特别针对Elsevier期刊投稿需求,提供了从模板安装到最终投稿的实用指南,帮助研究者高效完成论文排版工作。

weixin_28455801的博客 1323

如何利用三阈值游程理论识别干旱事件_python

如果当前时间点与上一个干旱事件的结束位置相隔不超过一个月(`index - current_event['end_index']

weixin_44259522的博客 1945

算法笔记 栈的应用 简单计算器 中缀和后缀表达式

思路 将输入的中缀表达式转后缀表达式 遇到数字,则算出数值,直接放入队列(注意数据非仅有一位,需要计算出整个数的值) 遇到运算符先判断优先级是否小于栈中top的运算符 如果是,将栈中的运算符pop到队列中,直到栈中没有运算符优先级更大为止 如果不是,则直接将运算符放入栈中 最后如果栈中剩余运算符,则直接放入队列中 计算后缀表达式,遍历队列 如果为数值,则放入栈中 如果为运算符 从栈中pop出两个数(注意是先第二个后第一个,后进先出嘛) 随后运算 最后把计算完成的数放入栈中 代码

Cindy_00的博客 272

本地使用大模型:Ollama+open-webui+AnythingLLM(Windows+linux)

随着大模型的发展,大量的开源模型可以被直接使用。大模型的使用可以选择在云端或者在本地,如果本地存储空间尚可,而且模型需求不是很大的话,我们可以选择在本地部署一个大模型来使用。针对特定的任务需求,进一步在本地去微调我们的大模型。我在windows和linux上都尝试了一遍,这里记录一下过程。

wpqgt的博客 2165

表达式(四则运算)计算的算法代写 essay代写

戏剧前奏——基本知识点 通常我们所看到的算术表达式, 程序代写官网请进入--》》http://www.xmsydw.com网上淘宝代写请进入--》》http://apenny.taobao.com 运算符总是在两个操作数中间(除),如(A+B)*C,这样的表达式叫做中缀表达式。这种表达式不同的运算符优先级不同,而且通常含有括号,计算机很难理解这种表达式。在编译系统中,要把人易于理解的表达式翻...

weixin_34221775的博客 258

踩坑记录:Clawdbot 对接 Minimax 报错 “401 token is unusable (1004)“ 的终极解决方案

如果你也在配置 Clawdbot 对接 Minimax 模型时,明明 API Key 是新申请的,却死活报错 `401 Unauthorized`,错误码 `1004`,提示 `token is unusable`——那么恭喜你,来对地方了。

hampeter的博客 2001

控制科学与工程(自动化)保研经验【1】——预备篇

个人情况 学校:中末流211 专业:自动化(学科评估B-) 年份:2019 排名:4/128 绩点:4.16/5 竞赛:三个国二(包括数模国赛美赛)、两个省一(机器人、电子设计竞赛) 【本科期间竞赛做的比较多,是我的一大亮点,可以在筛简历这关适当弥补专业排名的不足】 科研:一个校级的大创项目(水) 夏令营报名:中科大科学岛、中科大本部、自动化所、沈自所、北航(仪器17系)、山大、浙江大学、南开、同...

Control Everything 1万+

表达式(四则运算)计算的算法

表达式(四则运算)计算的算法戏剧前奏——基本知识点通常我们所看到的算术表达式,运算符总是在两个操作数中间(除),如(A+B)*C,这样的表达式叫做中缀表达式。这种表达式不同的运算符优先级不同,而且通常含有括号,计算机很难理解这种表达式。在编译系统中,要把人易于理解的表达式翻译成能正确求值的机器指令。编译系统中对中缀形式的算术表达式的处理方式是: 先把中缀表达式转换成后缀表达式,再进行计算。后缀表达

阳光日志 2万+

Android15音频进阶之AudioReach架构agmcap bringup调试(一百二十三)

本篇目的:Android15音频进阶之AudioReach架构agmcap录音调试。

Android系统攻城狮 2229

控制台输入表达式,打印最终结果

通过java实现输入表达式求值

zyf3060895310的博客 281

如何在 DevOps 管道中实现 AI?

AI与DevOps的融合(AIOps)正在重塑软件开发生命周期。本文系统阐述了AI在DevOps中的五大应用场景:智能监控、自动化测试、安全防护、CI/CD优化和事件管理,并提出了六步实施框架:痛点识别、工具选型、流程集成、智能监控、MLOps和治理合规。通过Netflix、Google等企业的实践案例,验证了AI在提升部署效率(降低40%故障率)、缩短问题解决时间(MTTR减少60%)方面的显著价值,同时指出数据质量、模型偏差等实施挑战。研究表明,战略性地

介绍AWS Azure GCP devops Terraform 等技术 497

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

hdu 1237(简单计数器)

题意:输入一个算术表达式,求值(数字为整数,但结果不一定是整数,不存在不合法的输入)。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 ——>>这是中缀表达式的运算。开两个栈,一个用来存操作数,一个用来存运算符。定义3个级别,# 的级别最低,+ 和 - 的级别相同且高于 #,* 和 / 的级别相同且高于 + 和 - ,先往运算符栈

黄俊东的专栏 1527

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

栈的相关知识

课程作业五 GitHub链接 栈(Stack) 堆栈(Stack)是一组相同数据类型的数据的集合,并拥有后进先出(last in first out)的特性,所有的操作都在栈顶进行。 栈堆应用广泛,包括递归的调用和返回、二叉树和森林的遍历操作、调用子程序和从子程序返回、计算表达式的转换和求值、中央处理单元(CPU)的终端处理(interrupt handling)以及所谓的堆栈计算机(stack ...

weixin_30672295的博客 81

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

中缀表达式转化为后缀表达式的过程详解及其实现代码

文章目录中缀表达式和后缀表达式的概念中缀表达式转化为后缀表达式的详细过程实例及详细过程 中缀表达式和后缀表达式的概念 中缀表达式:操作符以中缀形式处于操作数的中间,例:1 + 2。 后缀表达式:将运算符写在操作数之后,例:12+。 一个表达式E的后缀形式可以如下定义: 如果E是一个变量或常量,则E的后缀式是E本身。 如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1’E2’ op,这里E1’和E2’分别为E1和E2的后缀式。 如果E是(E1)形式的表达式,则E1的后缀式就是

薛定谔的猫的博客 1万+

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

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

__七把刀__ 17万+

中缀表达式 & 后缀表达式

一、什么是中缀表达式 & 后缀表达式? 中缀表达式: 我们生活中使用的算术表达式其实就是中缀表达式 举个例子:(1+6/3)*6 - 5 后缀表达式: 更有利于计算机进行计算的一种表达式,不再包含括号(),也不再考虑运算符优先级,一律从左到右进行计算 举个例子: 1 2 + 二、怎么将中缀表达式转换成后缀表达式呢? 利用栈结构来实现中缀表达式 -> 后缀表达式 转换规则:...

itis666的博客 8773

计算中缀表达式

“计算中缀表达式”可以称得上是一个特别经典的关于栈的算法题,几乎在所有数据结构教材中都会涉及,而且很多公司面试或者笔试的时候都会把这道题作为一个考察点。可以说,这是一道必须要掌握的算法题。中缀表达式、后缀表达式等概念在这里就不赘述了,让我们直奔主题。题目:输入一个中缀表达式,计算其结果。输入的前提假设:(1)只考虑+、-、*、/这四种运算符,中缀表达式中只有一种括号:();(2)输入的中缀表达式中...

凛冬烈焰的博客 7862

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

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

tanxinji的博客 4563

【数据结构】中缀表达式转换为后缀表达式

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

u011511601的专栏 1万+

中缀表达式转逆波兰表达式(后缀表达式)

总结波兰表达式与逆波兰表达式,用代码实现中缀表达式转逆波兰表达式。

Jacks丶的博客 8044

中缀表达式及后缀表达式图解

平常我们见到的四则运算表达式都是中缀表达式,这种表示方法适合人阅读,但是不适合计算机计算,因为乘除号出现在加减号的后面时可能要先计算后面的加减号,加上括号后就更加麻烦了。计算机可以通过逆波兰式来非常方便的实现计算。 计算机实现四则运算主要分两步进行: 将给定的中缀形式的表达式转换成后缀表达式形式利用后缀表达式执行计算 下面是上面两个步骤的图解过程(这实际上是《大话数据结构》一书中的图

8711
下一篇: 学习笔记——赫夫曼树的度
a_silly_coder
博客等级 码龄8年 13粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值