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

这篇具有很好参考价值的文章主要介绍了【数据结构】一篇文章带你彻底学会《后缀表达式》。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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


一、概念

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

二、计算过程理解

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

后缀表达式,# 【c语言】数据结构,数据结构,开发语言,c++,c语言,笔记
后缀表达式,# 【c语言】数据结构,数据结构,开发语言,c++,c语言,笔记

三、原理

建立一个空栈

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

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

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

后缀表达式,# 【c语言】数据结构,数据结构,开发语言,c++,c语言,笔记

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

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

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

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

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

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

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

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

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

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


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

拆解表达式:

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

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

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


后缀表达式,# 【c语言】数据结构,数据结构,开发语言,c++,c语言,笔记文章来源地址https://www.toymoban.com/news/detail-743150.html

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

到了这里,关于【数据结构】一篇文章带你彻底学会《后缀表达式》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 假期算法提升(一篇文章带你彻底学会双指针)

    呀哈喽,我是结衣。 对于要参加程序设计比赛的人来说,算法永远都是一道绕不开的坎,你必须的去了解他才可以更好的去解决问题。非形式地说,算法就是任何良地计算过程,我们可以把算法看作是用于求良说明地计算问题地工具。那么今天我们学到的就是其中最基础的一

    2024年02月19日
    浏览(29)
  • 【Spring框架】一篇文章带你彻底搞懂Spring解决循环依赖的底层原理

    目录 一、前言 二、什么是循环依赖 三、Spring Bean 的循环依赖问题 3.1 Bean 的创建步骤 3.2 为什么 Spring Bean 会产生循环依赖问题? 3.3 什么情况下循环依赖可以被处理? 四、Spring 如何解决循环依赖问题? 4.0 什么是三级缓存 4.1 简单的循环依赖(没有AOP) 4.1.0 创建Bean的前期流

    2024年04月17日
    浏览(42)
  • ElasticSearch篇——认识、安装和使用IK分词器插件,一篇文章带你彻底拿下!

    一、什么是IK分词器 所谓分词,即把一段中文或者别的划分成一个个的,我们在搜索时会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配的操作,默认的中文分词器是将每一个字看成一个词,比如“我爱中国”会被分成“我”、

    2024年02月03日
    浏览(27)
  • 数据结构入门(C语言版)一篇文章教会你手撕八大排序

    排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而

    2024年02月01日
    浏览(36)
  • 【数据结构】什么是时间复杂度、空间复杂度?看此篇文章足矣

    🧑‍💻作者: @情话0.0 📝专栏:《数据结构》 👦个人简介:一名双非研究生的编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! 在数据结构中,有着众多的算法,比如查找算法,排序算法等。在查找算法中有顺序查找、折半查找、分块查找等,

    2023年04月08日
    浏览(31)
  • 【数据结构——顺序表】线性表很难嘛?这篇文章能让你轻松掌握顺序表

    线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…。线性表在逻辑上是线性结构,也就是说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式的结构的形式存储。 是n个具有相

    2024年02月07日
    浏览(38)
  • 一篇文章带你了解SpringBoot目录结构

    前言 SpringBoot是整合Spring技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,是一个能够快速构建生产级别的Spring应用的工具。SpringBoot是目前流行的微服务框架,倡导“约定优于配置”,简化Spring项目搭建及开发过程。springboot提供了很多核心的功能,比如自动化配置

    2024年03月25日
    浏览(51)
  • 一篇文章带你玩转PostGIS空间数据库

    1.什么是空间数据库 人类理解世界其实是按照三维的角度,而传统的关系型数据库是二维的,要想描述空间地理位置,点、线、面,我们就需要一个三维数据库,即所谓空间数据库。 postGIS就是一个空间数据库。 2.空间数据库是怎么存储的 除了普通数据库所具备的字符串、数

    2024年04月10日
    浏览(33)
  • 【TDengine】一篇文章带你通过docker安装TDengine数据库

    目录 1、通过docker方式安装 2、相关步骤解释 3、停止运行taos与卸载 虽然并不推荐在生产环境中通过 Docker 来部署 TDengine 服务,但 Docker 工具能够很好地屏蔽底层操作系统的环境差异,很适合在开发测试或初次体验时用于安装运行 TDengine 的工具集。特别是,借助 Docker,能够比

    2024年02月15日
    浏览(38)
  • 一篇文章彻底清楚shellcode(精品)

    1.没开沙箱(此时我们可以系统调用get shell) (一)32位程序系统调用 32位程序有别于64位程序,32位通过栈传参,我们常用的寄存器有4个数据寄存器(eax,ebx,ecx,edx),2个变址寄存器(esi,edi),2个指针寄存器(esp,ebp). 下边我们就来看一种系统调用方式及其构造: 执行上述shellcode即可g

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包