创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
后缀表达式充分利用了栈的知识
栈(Stack)是一种后进先出(LIFO)的数据结构
栈通常包括两个主要操作:入栈(push)和出栈(pop)
以及另外两个次要操作:查询栈顶元素(peek)和判断栈是否为空(isEmpty)
后缀表达式 目录
- 一、概念
- 二、计算过程理解
- 三、原理
- 中缀表达式转换为后缀表达式
- 图解过程:
一、概念
后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。
二、计算过程理解
如果在表达式中遇到运算符,就进行运算符前两个数使用这个运算符进行计算,结果保留,再进行后续的计算,再次遇到运算符时,计算过程同上。
三、原理
建立一个空栈
从左到右读表达式,如果读到数据就将它压入栈中,如果读到运算符则取出由栈顶向下的数据按操作数运算
再将运算的结果代替原栈顶的数据,压入栈中
如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束
- 如果当前字符是数字,则将其转换为整数并将其压入栈
- 如果当前字符是运算符,则弹出堆栈上的最后两个元素,使用该运算符对这两个元素进行计算,并将结果压入栈
堆栈顶部的元素即为表达式的计算结果。
中缀表达式转换为后缀表达式
- 创建一个空栈和一个空串,用于存放运算符和转换后的后缀表达式;
- 从左到右遍历中缀表达式中的每个元素:
- 如果当前元素是操作数,将其添加到输出串的末尾;
2.如果当前元素是左括号“(”,将其压入栈中;
3.如果当前元素是右括号“)”,则重复出栈操作直到栈顶元素是左括号,并将所有操作符加入输出串中;
4.如果当前元素是操作符,并且其优先级低于或等于栈顶运算符,则弹出栈顶元素并将其加入输出串中,然后再将当前操作符压入栈中;
5.如果当前元素是操作符,并且其优先级高于栈顶元素,则直接将当前操作符入栈。
- 当中缀表达式中所有元素被处理完毕后,将栈中剩余的所有操作符都加入输出串中。
最终得到的输出串就是中缀表达式对应的后缀表达式
图解过程:
根据✖乘号的优先级,补充括号
拆解表达式:
-
左侧存放数据,右侧存放符号
-
当遇到右括号时,将左右括号中的符号放到左侧,剩下的符号依然在右侧
-
重复过程就得到了后缀表达式
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |