后缀式转换,及中缀式转换(全网最详细)

优先级相同:从右往左

中缀式:1+2,1-2,1*2

上面对应下面的后缀式为:12+,12-,12*

中缀式转换为后缀式

  • 案例:
    • 中缀式:1-2 * (3+4) / 5
    • 转换后缀式的步骤为:1234+5/*-
  1. 首先计算括号里面看作是 a+b 转换为后缀式为 ab+
  2. 放入到表达式中,此刻为:1-2 * 34+ / 5
  3. * 和 / 两个优先级相同,从右往左进行转换
  4. 此刻把 34+ 看做为一个整体
  5. 34+ / 5转换为后缀式:34+5/
  6. 放入到表达式中,此刻为:1-2*34+5/
  7. + 和 *,* 的优先级更高
  8. 此刻把 34+5/ 看做为一个整体
  9. 2 * 34+ / 5转换为后缀式为:234+/5 *
  10. 放入到表达式中,此刻为:1-234+5/*
  11. 此刻把 234+5/* 看做为一个整体
  12. 1-234+5/* 转换为后缀式为:1234+5/*-

8dd493dba72444bd87f88690c074d7e8.png

后缀式转换为中缀式

  • 利用栈的先进后出原则进行转换
  • 遇到数字就进栈,遇到符号计算(计算之后记得入栈)

7de577c176854edf88f30b85b78db799.png

 

中缀表达转换后缀表达的一种常用方法是使用逆波兰表示法(RPN)。以下是将中缀表达转换后缀表达的步骤: 1. 创建一个空的栈和一个空的后缀表达列表。 2. 从左到右扫描中缀表达。 3. 如果当前令牌是操作数,则将其添加到后缀表达列表中。 4. 如果当前令牌是左括号,则将其压入栈中。 5. 如果当前令牌是右括号,则弹出栈中的所有运算符,将它们添加到后缀表达列表中,直到遇到左括号为止。然后弹出左括号并将其丢弃。 6. 如果当前令牌是运算符,则将其压入栈中。但在这样做之前,将与栈顶运算符的优先级进行比较。如果栈顶运算符具有更高或相等的优先级,则弹出栈顶运算符并将其添加到后缀表达列表中。重复此步骤,直到栈顶运算符优先级低于当前令牌为止。 7. 当扫描完整个中缀表达后,如果栈中仍有运算符,则将它们依次弹出并添加到后缀表达列表中。 8. 后缀表达列表就是转换后的后缀表达。 以下是一个示例,演示如何将中缀表达“3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3”转换后缀表达中缀表达: 3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3 后缀表达: 3 4 2 * 1 5 - 2 3 ^ ^ / + 解释: - 3 添加到后缀表达列表中。 - + 添加到栈中。 - 4 添加到后缀表达列表中。 - * 与栈顶运算符 + 进行比较,* 的优先级高,将 * 添加到栈中。 - 2 添加到后缀表达列表中。 - / 与栈顶运算符 * 的优先级相等,将 / 添加到栈中。 - ( 添加到栈中。 - 1 添加到后缀表达列表中。 - - 与栈顶运算符 ( 的优先级相等,将 - 添加到栈中。 - 5 添加到后缀表达列表中。 - ) 弹出栈中的所有运算符,将它们添加到后缀表达列表中,直到遇到左括号为止。添加的运算符依次为 - 和 /。 - ^ 与栈顶运算符 / 的优先级相等,将 ^ 添加到栈中。 - 2 添加到后缀表达列表中。 - ^ 与栈顶运算符 ^ 的优先级相等,将 ^ 添加到栈中。 - 3 添加到后缀表达列表中。 - 弹出栈中的所有运算符,将它们添加到后缀表达列表中。添加的运算符为 ^。 - + 弹出栈中的所有运算符,将它们添加到后缀表达列表中。添加的运算符依次为 /、* 和 +。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

长袖格子衫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值