计算器核心算法——中缀表达式转为后缀表达式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了计算器核心算法——中缀表达式转为后缀表达式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1177字,纯文字阅读大概需要2分钟。
内容图文
![计算器核心算法——中缀表达式转为后缀表达式](/upload/InfoBanner/zyjiaocheng/649/bc61c31fb9964466859982fd728ff25f.jpg)
中缀表达式转后缀表达式的过程类似编译过程
——四则运算表达式中的括号必须匹配
——根据运算符优先级进行转换
——转换后的表达式中没有括号
——转换后可以顺序的计算出最终结果
这是某位伟人研究出的算法,在这里我们直接拿来用就可以。
转换过程:
——当前元素e为数字:输出
——当前元素e为运算符:
1.与栈顶运算符进行优先级比较
2.小于等于:将栈顶元素输出,转1
3.大于:将当前元素e入栈
——当前元素e为左括号:入栈
——当前元素e为右括号:
1.弹出栈顶元素并输出,直至栈顶元素为左括号
2.将栈顶的左括号从栈中弹出
while( !exp.isEmpty() ) { QString s = exp.dequeue(); if(isNumber(e)) 输出e; else if(isOperator(e)) { while( priority(e) <= priority(stack.top() )) 输出栈顶元素: stack.pop(); stack.push(e); } else if(isLeft(e)) stack.push(e); else if(isRight(e)) { while( !isLeft(stack.top() )) 输出栈顶元素 stack.pop(); 从栈中弹出左括号: stack.pop(); } }
exp是上篇博客中用分离算法得到的队列了,将里面的每个元算都处理,也就是说一直处理到这个队列为空为止。
关键点:转换过程中左右括号是重要标志
——如何确保表达式中的括号能够左右匹配?
合法的四则运算表达式
——括号匹配成对出现
——左括号必然先于右括号出现
for(int i=0; i<len; i++) { if(exp[i]为左括号) exp[i]入栈; else if(exp[i]为右括号) { if(栈顶元素为左括号) 将栈顶元素弹出; else 匹配错误 } }
内容总结
以上是互联网集市为您收集整理的计算器核心算法——中缀表达式转为后缀表达式全部内容,希望文章能够帮你解决计算器核心算法——中缀表达式转为后缀表达式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。