栈的应用Ⅰ--后缀表达式 括号匹配
来源:互联网 发布:四知文言文翻译注解 编辑:程序博客网 时间:2024/06/05 09:26
一、后缀表达式
在我们日常生活中所见表达式都是中缀表达式,如 “5*(3+7)-4/2”,这中表达式符合我们的思维逻辑,可读性强,但是不利于计算机的解析。由波兰逻辑学家J.Lukasiewicz发明出后缀表达式,比如上式转变为后缀表达式”5 3 7 + * 4 2 / -“,这种人类难以适应的表达顺序,计算机却很受用。
1.计算机应用后缀表达式的过程:
如后缀表达式:”5 3 7 + * 4 2 / -”
规则:从左到右遍历表达式的每一个数字和符号,遇到数字就进栈,遇到是符号,就将处于栈顶的两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。
①初始化一个空栈。此栈用来对要运算的数字进出使用。
②后缀表达式中前三个都是数字,所以5,3,7进栈。
③接下来是’+’运算符,将栈顶的两个元素出栈进行加法运算,再将结果进栈。
④之后是’*’运算符,将栈顶的两个元素出栈进行运算,将运算结果再进栈。
⑤之后4,2进栈,遇’/’将2,4出栈,2作为除数,4作为被除数。
⑥之后遇’-‘,50作为被减数。48入栈,最后出栈,栈为空结果为48.
二、中缀表达式转后缀表达式
如:中缀表达式”5*(3+7)-4/2”转为”5 3 7 + * 4 2 / -“
规则:顺序遍历数字和符号,数字输出,成为后缀表达式的一部分,遇符号则判断栈顶元素与其的优先级,若为右括号或者优先级不高于栈顶元素,则将栈顶元素依次出栈并输出,并将当前符号进栈,直到后缀表达式输出完成。
①5输出,’*’入栈,’(‘入栈,3输出,’+’入栈,7输出。
输出:5 3 7
②遇到’)’,则将’(‘之前的符号全部出栈输出。
输出:5 3 7 +
③遇到’-‘,优先级比栈顶’* ‘低,’* ‘出栈输出,’-‘进栈。
输出:5 3 7 + *
④输出4,遇到’/’比栈顶’-‘高,’/’进栈,输出2,表达式读取结束,栈内符号依次输出。
输出:5 3 7 + * 4 2 / -
中缀表达式转后缀表达式结束
三、括号匹配
三种配对括号’(‘,’)’,’[‘,’]’,’{‘,’}’的序列匹配
规则:做一个空栈,读入字符直到字符串尾。如果读到的字符为开放符号’(‘,’[‘,’{‘,则将其推入栈中,如果字符为封闭符号’)’,’]’,’}’,如果栈为空则报错,否则将栈顶元素弹出,如果不是对应的封闭元素,则报错,在字符串读取结束,栈不为空则报错。
如字符串: (a)c[b(d)]e(g{f})
①则顺序读取字符,第一个字符为’(‘开放符号,则将’(‘压栈。
②读取a,不进行操作,继而读取’)’为封闭符号,进行出栈匹配。栈顶元素为’(‘是对应的配对符号,则继续操作…
③直到最后字符串读取完成,查看top是否为-1。
四、函数栈
是重要知识点,保留。
- 栈的应用Ⅰ--后缀表达式 括号匹配
- 栈的应用,括号匹配,后缀表达式计算,有趣的汉诺塔--python实现
- 栈的应用(括号匹配、后缀表式计算、中缀转后缀)
- 数据结构-栈的应用-算术表达式小括号匹配
- 栈的应用(括号匹配、逆波兰表达式)
- (1.2.2.1)栈和队列的应用:数制转换、括号匹配、后缀表达式求解,中缀表达式求解、双栈实现队列,min函数栈
- 栈的应用:括号匹配
- 括号匹配---栈的应用
- 栈的应用---括号匹配
- 栈的应用---括号匹配
- 栈的应用--括号匹配()
- 括号匹配 栈的应用
- 栈的应用--括号匹配
- C语言实现括号匹配,中缀表达式转后缀表达式并计算的算法
- 【数据结构】动态栈+括号匹配+逆波兰表达式(后缀表达式计算)
- 括号匹配问题 中缀表达式转换为后缀表达式
- 中缀表达式转后缀表达式与括号匹配
- 栈的应用---后缀表达式
- 网购秒杀系统架构案例分析
- mybatis在xml文件中处理大于号小于号的方法
- 深入理解Java垃圾回收机制
- MVC和MVP —以及两者间的区别
- 你必须收藏的Github技巧
- 栈的应用Ⅰ--后缀表达式 括号匹配
- CAS实现单点登录(SSO)经典完整教程
- 【数学建模】CUMCM-2011B model5 围捕方案确定
- Ubuntu的一些shell命令
- android上开源的酷炫的交互动画和视觉效果
- 深入理解Java的Annotation系列-第一部分 注解基础
- 某安全岗模拟笔试题的个人作答
- 在tf.estimator中构建inpu_fn解读
- win7下idea远程连接hadoop,运行wordCount