栈应用2(中缀表达式转换成后缀表达式)-笔记

本文详细解释了如何使用栈数据结构将中缀表达式转换为后缀表达式,介绍了中缀、前缀及后缀表达式的概念,展示了具体算法步骤,并通过实例演示了转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:如何使用栈来实现将中缀转换为后缀表达式的算法?
解答:在讨论算法前,首先介绍中缀、前缀和后缀表达式的定义
中缀:中缀表达式由一个单一字符或运算符,连接前后两个中缀字符串共同组成。
A
A+B
(A+B)+(C+D)
前缀:前缀表达式由一个单一字符或运算符,随后是两个前缀字符串共同组成。每个前缀字符串长度大于1,包含一个运算符、第一个操作数和第二个操作数。
A
+AB
++AB-CD
后缀:后缀表达式(逆波兰表达式)由两个后缀字符串,随后是一个单一字符或运算符共同组成。每个后缀字符串长度大于1,包含第一个操作数和第二个操作数,随后是一个运算符。
A
AB+
AB+CD-+
前缀和后缀表达式是无需括号描述数学表达式的方法。计算后缀和前缀表达式的时间开销是O(n),n是数组中元素的个数。

下表给出了运算符之间的优先级和相关性(计算的先后顺序)
在这里插入图片描述
重要性质
a.仔细比较中缀表达式2+3*4和后缀表达式2 3 4 + *,可以发现两种表达式中数字(操作数)的次序是相同的,都是2 3 4。但是运算符 *和(+)的次序在两个表达式中是不同的。
b.只需一个栈就可以把中缀表达式转换成后缀表达式。利用栈把表达式中运算符的次序从中序改编成后序。栈中仅存储运算符和左括号‘(’。由于后缀表达式中不包含括号,所以输出后缀表达式时将不输出括号。
算法:
a.创建一个栈
b.for(输入字符串中的每个字符t){
if(t 是一个操作数)输出t
else if(t 是一个有括号)
}
出栈并输出该符号,直至一个左括号出栈(但左括号不输出)
else //t 是一个运算符或左括号{
出栈并输出该符号,直至出现一个比t的优先级小的符号,或者出现一个左括号,或者栈空
t入栈
}
}
c.出栈并输出该符号,直至栈空

为了更好地理解上述转换算法,给出表达式A*B-(C+D)+E的具体执行过程
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值