(C\C++)数据结构与算法U+平台第三章作业

本文详细介绍了中缀表达式与后缀表达式的关系,以及如何将中缀表达式转换为后缀表达式的方法。通过具体实例展示了转换过程,并提供了相关代码,帮助理解算法的实现。
摘要由CSDN通过智能技术生成


题目:关于中序表达式与后续表达式

在这里插入图片描述

答案:C

详解:

1.what中缀what后缀?

就以这道题为例或者如(1+2)*(4-5),其实这种常见的表达式是我们一直所用的,是中序表达式。

但是,计算机中不能直接用中缀表达式计算,形如(1+2)*(4-5)之类的,计算机时看不懂的,但是计算机可以很容易的通过后缀表达式来计算我们所输入的算式。所以我们就需要把中缀表达式转换为后缀表达式。

后缀式即逆波兰式,是波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用械实现求值。对于表达式x:=(a+b)(c+d),其后缀式为xab+cd+:=, 则对于(1+2)x(4-5),他的后缀表达式时12+45-x,括号时不要的。

简单来说,就是计算机没法和人类一样直观思考,只能一步步的通过指令进行运行,所以我们要把输入的中缀表达式转化为后缀表达式。

2.中缀转化为后缀的方法

1.遇到操作数:直接输出(添加到后缀表达式中)、
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号时:将其入栈
4.遇到要右括号时:执行出栈操作,括号是不进入后缀表达式的,直到弹出栈的是左括号
5.遇到运算符:(加减乘除)弹出栈里所有优先级大于或等于该元素的栈顶元素,注意左括号,然后将该运算符入栈
6.当遍历完中序表达式时,弹出所有的栈里元素

3.转换上实例

就以此题目为例a-(b-c/d)*e
遇到a:直接输出
后缀表达式:a
堆栈:空
遇到-:堆栈:空,所以入栈
后缀表达式:a
堆栈:-
遇到(:入栈
后缀表达式:a
堆栈:-(
遇到b:输出
后缀表达式:ab
堆栈:-(
遇到-:堆栈不为空,且没有优先级大于-,入栈
后缀表达式:ab
堆栈:-(-
遇到c:输出
后缀表达式:abc
堆栈:-(-
遇到/:堆栈不为空,且没有优先级大于/,入栈
后缀表达式:abc
堆栈:-(-/
遇到d:输出
后缀表达式:abcd
堆栈:-(-/
遇到):右括号,则执行出栈操作,括号是不进入后缀表达式的,直到弹出栈的是左括号
后缀表达式:abcd/-
堆栈:-
遇到x:堆栈不为空,且没有优先级大于x,入栈
后缀表达式:abcd/-
堆栈:-x
遇到e:输出
后缀表达式:abcd/-e
堆栈:-x
遍历完成:弹栈
后缀表达式:abcd/-ex-
堆栈:空
结束程序,转换完成。

4.上代码

主函数代码

int main() {
   
	char cal[50];
	char c
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

纸斌在摸鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值