首页文章正文

逆波兰符号法运算优先级,将表达式转化为逆波兰表达式

表达式转换成逆波兰式 2023-09-24 21:31 444 墨鱼
表达式转换成逆波兰式

逆波兰符号法运算优先级,将表达式转化为逆波兰表达式

左括号,直接压入栈(括号是最高优先级,无序比较,入栈后优先级降到最低,确保其他符号正常入栈) 右括号,意味着括号已经结束)不断弹出栈顶云算符,直到遇到左括号(弹出但不输出) 运算符运算符优先算法的基本原理是,每个操作符都有其自己的优先级,当遇到操作符时,比较它们的优先级,将优先级高的操作符先入栈,优先级低的操作符后入栈。结论逆波

⊙△⊙ 然后遇见符号+,此时栈顶元素是左括号(,任何符号和左括号比,都是认为优先级高,直接入栈就好啦,然后遇见6,直接输出然后遇见右括号),就不用入栈了,就是现在是优先级最高的表达式,就逆波兰记法不需要括号来标识操作符的优先级。我们中学学习的表达式叫中缀表达式例如:4+(2*5)-6 逆波兰表达式叫后缀表达式,操作符在操作数之后如:5 + ((1 + 2) * 4) − 3的逆波兰表

遇到除号/,此时除号的优先级高于栈顶的减号,所以将除号压入栈中: * - / 遇到数字2,添加到逆波兰表达式中:5 2 3 4 2 没有更多的元素需要处理,将栈中剩余的运算符依次弹出,并添加到+1+*2-4 3/ 6 2 // 从右向左扫描,当遇到运算符时计算其最近的右侧2个运算数+1+*2-4 3 3 //先计算最右侧的数据,也就是6/2=3+1+*2 1 3 // 同理,4-3 = 1+1+2 3 //

这种方法实现起来有点难度,需要考虑运算符的优先级,括号的配对,堆栈的使用等等。我们正常情况下看到的数学表达式如果用二叉树遍历的话,恰好是中序遍历,故叫做运算符栈S1(含一个结束符号), 输入逆波兰式的栈S2(空栈) S1放入优先级最低的# 中缀式应以此最低优先级的运算符结束可指定其他字符,不一定非#   (1)若操作数,送S2 (2)若运算符,则

后台-插件-广告管理-内容页尾部广告(手机)

标签: 将表达式转化为逆波兰表达式

发表评论

评论列表

灯蓝加速器 Copyright @ 2011-2022 All Rights Reserved. 版权所有 备案号:京ICP1234567-2号