【数据结构】一篇文章带你彻底学会《后缀表达式》

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

后缀表达式充分利用了的知识

栈(Stack)是一种后进先出(LIFO)的数据结构
栈通常包括两个主要操作:入栈(push)和出栈(pop)
以及另外两个次要操作:查询栈顶元素(peek)和判断栈是否为空(isEmpty)


一、概念

后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。

二、计算过程理解

如果在表达式中遇到运算符,就进行运算符前两个数使用这个运算符进行计算,结果保留,再进行后续的计算,再次遇到运算符时,计算过程同上。

在这里插入图片描述
在这里插入图片描述

三、原理

建立一个空栈

从左到右读表达式,如果读到数据就将它压入栈中,如果读到运算符则取出由栈顶向下的数据按操作数运算

再将运算的结果代替原栈顶的数据,压入栈中

如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束

在这里插入图片描述

  • 如果当前字符是数字,则将其转换为整数并将其压入栈
  • 如果当前字符是运算符,则弹出堆栈上的最后两个元素,使用该运算符对这两个元素进行计算,并将结果压入栈

堆栈顶部的元素即为表达式的计算结果。

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

  • 创建一个空栈和一个空串,用于存放运算符和转换后的后缀表达式;
  • 从左到右遍历中缀表达式中的每个元素:
  1. 如果当前元素是操作数,将其添加到输出串的末尾;

2.如果当前元素是左括号“(”,将其压入栈中;

3.如果当前元素是右括号“)”,则重复出栈操作直到栈顶元素是左括号,并将所有操作符加入输出串中;

4.如果当前元素是操作符,并且其优先级低于或等于栈顶运算符,则弹出栈顶元素并将其加入输出串中,然后再将当前操作符压入栈中;

5.如果当前元素是操作符,并且其优先级高于栈顶元素,则直接将当前操作符入栈。

  • 当中缀表达式中所有元素被处理完毕后,将栈中剩余的所有操作符都加入输出串中。

最终得到的输出串就是中缀表达式对应的后缀表达式


根据✖乘号的优先级,补充括号

拆解表达式:

  • 左侧存放数据,右侧存放符号

  • 当遇到右括号时,将左右括号中的符号放到左侧,剩下的符号依然在右侧

  • 重复过程就得到了后缀表达式


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
  • 13
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天喜Studio

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

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

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

打赏作者

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

抵扣说明:

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

余额充值