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

news2024/11/17 17:29:44

方法一:加括号法示例

步骤: 
1、根据运算符的优先级对中缀表达式加括号(有几个运算符就有几对括号,原有的括号不用加)
2、将运算符移到对应括号后面
3、去掉所有括号,即为后缀表达式

以下面的中缀表达式为例:

9+(3-1)×3+8÷2

    1、变为((9+((3-1)×3))+(8÷2))
    2、变为((9((3 1)-3)*)+(82)/)+
    3、得到9 3 1 - 3 * + 8 2 / +

解析:

①(3-1)=A作为一个整体;
②((3-1)*3))=A*3=B作为一个整体;
③(9+((3-1)*3))=(9+B)=C作为一个整体;
④(8/2)=D作为一个整体:
⑤((9+((3-1)×3))+(8÷2))=(C+D)作为一个整体:

最后再逆序求后缀表达式:
⑤ 改为C D-  ,C和D都认为是两个数  ,也就是 (9+((3-1)×3))  (8÷2)  -
④ 将 (9+((3-1)×3)) 继续改为 


最后输出后缀表达式为:

    9 3 1 - 3 * + 8 2 / +

方法二:栈的应用-四则运算表达式求值

2.1.1 栈的应用-四则运算表达式求值规则

  1.设定运算符栈;
  2.从左到右遍历中缀表达式的每个数字和运算符;
  3.若当前字符是数字,则直接输出成为后缀表达式的一部分;
  4.若当前字符为运算符,则判断其与栈顶运算符的优先级,若优先级大于栈顶运算符,则进栈;若优先级小于等于栈顶运算符,退出栈顶运算符成为后缀表达式的一部分,然后将当前运算符放入栈中;
  5.若当前字符为“(”,进栈;
  6.若当前字符为“)”,则从栈顶起,依次将栈中运算符出栈成为后缀表达式的一部分,直到碰到“(”。将栈中“(”出栈,不需要成为后缀表达式的一部分,然后继续扫描表达式直到最终输出后缀表达式为止。

2.1.2 栈的应用-四则运算表达式求值示例

  1、初始化一个空栈。此栈用来对运算符进出栈使用。如图2-1-2-1的左图所示。
  2、第一个字符是数字9,直接输出9(根据规则3),第二个字符是运算符“+”,则“+”进栈(根据规则4),如图2-1-2-1的右图所示。

图2-1-2-1

3、第三个字符是符号“(”,则“(”进栈(根据规则5),如图2-1-2-2左图所示。

4、第四个字符是数字3,直接输出3(根据规则3),总输出表达式为

    9 3

第五个字符是运算符“-”,则“-”进栈(根据规则4),第六个字符是数字1,直接输出1(根据规则3),总输出表达式为

    9 3 1

如图2-1-2-2右图所示。


图2-1-2-2

5、第七个字符是符号“)”,此时依次将栈中运算符出栈成为后缀表达式的一部分,直到碰到"(",此时“(”上方只有“-”运算符,因此输出“-”运算符(根据规则6),总输出表达式为

    9 3 1 -

如图2-1-2-3左图所示。

  6、第八个字符是运算符“ * ”,因为此时的栈顶符号是运算符“+”,优先级低于“ * ”,因此不输出,“ * ”进栈(根据规则4),如图2-1-2-3右图所示。


图2-1-2-3

第九个字符是数字3,直接输出3(根据规则3),总输出表达式为

 9 3 1 - 3

7、第十个符号是运算符“+”,此时栈顶符号是“*”,比“+”运算符的优先级高。因此栈中元素出栈并成为后缀表达式的一部分(没有比“+”运算符更低的优先级,所以全部出栈),总输出表达式为

    9 3 1 - 3 * +

后把第十个符号“+”进栈(根据规则4)。
之前输出成为后缀表达式的“+”是中缀表达式中“9 + ”的“+”,现在入栈的“+”是中缀表达式中“9 + (3 - 1) × 3 +”的“+”。如图2-1-2-4左图所示。

  8、第十一个符号是数字8,直接输出8(根据规则3),总输出表达式为

   9 3 1 - 3 * + 8

  第十二个符号是运算符“÷”,则“/”进栈(根据规则4),如图2-1-2-4右图所示。

图2-1-2-4

 9、第十三个字符也就是最后一个字符是数字2,直接输出2(根据规则3),总输出表达式为

    9 3 1 - 3 * + 8 2

 如图2-1-2-5左图所示。

  10、因为已经到了最后一个字符,所以将栈中符号全部出栈成为后缀表达式的一部分,最终输出表达式为

    9 3 1 - 3 * + 8 2 / +

  如图2-1-2-5右图所示。

图2-1-2-5

整个过程,都充分利用了栈的后进先出特性来处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/984829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 年全国大学生数学建模A题目-定日镜场的优化设计

A题目是个典型的优化问题 大致思路(非完整) 先说题目的模型,有点类似一个人拿着镜子,这个镜子最终要映射到某个点上,有点类似下面这个玩意儿,只不过是个大型的而已 规划的吸收塔类似这个烧水壶,…

纷享销客华为云 | 聚力前行 共创云上新价值

近日,由华为云联合上万家生态伙伴举行的“第二届828 B2B企业节”在深圳盛大开幕,纷享销客作为华为云的战略合作伙伴出席了本次企业节的开幕,并斩获“华为云创新中心优秀制造解决方案伙伴”等多个奖项。纷享销客联合创始人 & 经营中心副总…

CTFHUB ICS(3)

1.S7协议恶意攻击分析 因为是plc的关机,我们直接过滤s7comm协议的内容 然后是提供info的排序我们可以根据这个进行分析 在plc中ack_data是对于job的响应这里ack_data返回了plc的stop即题目中描述的plc关机,而关机的发出属于job的信息所以我们去查找job里…

java八股文面试[设计模式]——创建型模式

创建型模式的作用就是创建对象,说到创建一个对象,最熟悉的就是 new 一个对象,然后 set 相关属性。但是,在很多场景下,我们需要给客户端提供更加友好的创建对象的方式,尤其是那种我们定义了类,但…

29 | 聊聊性能测试的基本方法与应用领域

并发用户数、响应时间、系统吞吐量之间的关系 当系统并发用户数较少时,系统的吞吐量也低,系统处于空闲状态,这个阶段被称为 “空闲区间”。 并发用户数进一步增长,系统的处理能力逐渐趋于饱和,因此每个用户的响应时间会…

2023全国大学生数学建模竞赛A题思路模型代码

目录 一.选题建议先发布,思路模型代码论文第一时间更新,获取见文末名片 二.选题建议,后续思路代码论文 A 题 定日镜场的优化设计 各题分析 获取完整思路代码见此处名片 一.选题建议先发布,思路模型代码论文第一时间更新&…

五大优化技巧,让你的视频直播app源码更加流畅

优化技巧一:性能调优 视频直播app源码在确保流畅体验方面是至关重要的。为了提升性能,以下是几项关键的优化技巧: 使用轻量级编码器和解码器:选择高效的编码器和解码器,以减少资源占用,并确保视频流畅播放…

2023全国大学生数学建模ABCDE选题建议,思路模型,小白要怎么选?难度怎么样

首先最重要的&#xff0c;难度C<B<A&#xff0c;D、E题推荐选E题 大家可以查看我们的视频讲解&#xff0c;在这里&#xff1a;【2023全国大学生数学建模竞赛选题建议&#xff0c;难度分析&#xff0c;小白应该怎么选】 https://b23.tv/S6O26uc 选题建议视频播放​b23.t…

Matlab如何导入Excel数据并进行FFT变换

如果你发现某段信号里面有干扰&#xff0c;想要分析这段信号里面的频率成分&#xff0c;就可以使用matlab导入Excel数据后进行快速傅里叶变换&#xff08;fft&#xff09;。 先直接上使用方法&#xff0c;后面再补充理论知识。 可以通过串口将需要分析的数据发送到串口助手&a…

【1++的数据结构】之哈希(一)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的数据结构】 文章目录 一&#xff0c;什么是哈希&#xff1f;二&#xff0c;哈希冲突哈希函数哈希冲突解决 unordered_map与unordered_set 一&#xff0c;什么是哈希&#xff1f; 首先我们要…

(3)MyBatis-Plus待开发

常用注解 TableName MyBatis-Plus在确定操作的表时&#xff0c;由BaseMapper的泛型决定即实体类型决定&#xff0c;且默认操作的表名和实体类型的类名一致,如果不一致则会因找不到表报异常 //向表中插入一条数据 Test public void testInsert(){User user new User(null, &…

Android 10.0 禁用adb shell input输入功能

1.前言 在10.0的产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接下来分…

yolov7添加注意力机制

yolov7结构图 方法:直接在common里改,在相关的后面加上就行 1、接受通道数的注意力机制 1、目的:在三个输出地方添加注意力 yolov7.yaml文件,换成其他模块 注意力链接 2、models下建SE.py 3、common.py下,先找class Conv,再复制一份修改,把模块导进来 4、yolo.…

生成式AI时代的新基础设施

生成式人工智能席卷了科技行业。 2023 年第一季度&#xff0c;随着数亿用户采用 ChatGPT 和 GitHub CoPilot 等应用程序&#xff0c;对新一代 AI 初创公司的投资高达 1.7B 美元。 技术领先的公司正在争先恐后地制定自己的生成式AI策略&#xff0c;许多公司都在努力将应用程序投…

基于Java+SpringBoot+Vue前后端分离校园资产管理设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

45位主播带货破亿,单日热销100w+单,8月榜单有哪些看点?

根据抖音官方数据&#xff0c;截至2021年1月&#xff0c;抖音在全球范围内的日活用户已经超过7亿。 从娱乐到学习&#xff0c;从社交到购物&#xff0c;抖音成为了人们生活中不可或缺的一部分。 那么&#xff0c;8月有哪些主播表现突出&#xff0c;哪些商品在畅销&#xff0c;哪…

【内存管理】C与C++的内存管理异同点

C/C程序内存区域划分 栈又称堆栈&#xff1a;存放非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。内存映射段&#xff1a;高效的I/O映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存&#xff0c;做进程间通信。堆&…

NATAPP使用详细教程(免费隧道内网映射)

NATAPP - https://natapp.cn/tunnel/lists NATAPP 在开发时可能会有将自己开发的机器上的应用提供到公网上进行访问&#xff0c;但是并不想通过注册域名、搭建服务器&#xff1b;由此可以使用natapp&#xff08;内网穿透&#xff09; 购买免费隧道 修改隧道配置 看自己的web…

RTMP流媒体服务器EasyDSS视频点播平台在不关闭防火墙的情况下平稳部署的具体步骤

EasyDSS视频直播点播平台提供了视频转码、点播、直播、推拉流、录像、回放等功能&#xff0c;可应用在AR、VR、无人机推流、虚拟直播、教育培训、远程会议等多样化的场景中。 通常我们在部署EasyDSS时都建议用户关闭防火墙的&#xff0c;但是也有无需关闭防火墙的部署办法&…

4、nginx 配置实例-反向代理

文章目录 4、nginx 配置实例-反向代理4.1 反向代理实例一4.1.1 实验代码 4.3 反向代理实例二4.3.1 实验代码 【尚硅谷】尚硅谷Nginx教程由浅入深 志不强者智不达&#xff1b;言不信者行不果。 4、nginx 配置实例-反向代理 4.1 反向代理实例一 实现效果&#xff1a;使用 nginx…