栈的一个小应用——Dijkstra的双栈算术表达式
来源:互联网 发布:js 时分秒 时间选择器 编辑:程序博客网 时间:2024/05/16 23:44
public static Double evl(String str){ Stack<Double> vals = new Stack<Double>(); Stack<Character> op = new Stack<Character>(); char[] ch = str.toCharArray(); for(int i = 0;i < ch.length;i++){ if(ch[i] == '+') op.push(ch[i]); else if(ch[i] == '-') op.push(ch[i]); else if(ch[i] == '*') op.push(ch[i]); else if(ch[i] == '/') op.push(ch[i]); else if(ch[i] == '('); else if(ch[i] == ')'){ char o = op.pop(); Double val = vals.pop(); if(o == '+') val = val + vals.pop(); else if(o == '-') val = vals.pop() - val; else if(o == '*') val = vals.pop() * val; else if(o == '/') val = vals.pop() / val; vals.push(val); }else{ vals.push(Double.parseDouble(Character.toString(ch[i]))); } } return vals.pop(); }
当然,这个算法的局限性太大了,但作为栈的一个小应用足够了,
思路:表达式是由数字,操作符,括号组成的,从左到右扫描,
(1)数字就放入操作数栈
(2)操作符就放入符号栈
(3)忽略左括号,遇到右括号,拿出所需要操作符和操作数进行计算,在把结果压入操作数栈。
应用的原理,就是用计算的结果来代替原有的表达式,反复应用这个规律进行计算。而右括号就是开始进行计算的标志。
0 0
- 栈的一个小应用——Dijkstra的双栈算术表达式
- Dijkstra的双栈算术表达式的求值算法
- Dijkstra的双栈算术表达式求值算法
- Dijkstra的双栈算术表达式求值算法
- Dijkstra的双栈算术表达式求值算法
- Dijkstra的双栈算术表达式求值算法
- 数据结构-栈的应用-算术表达式小括号匹配
- 数据结构 栈的应用——算术表达式求值
- 栈的应用——求解简单算术表达式值
- Dijkstra双栈算术表达式求值算法
- Dijkstra双栈算术表达式求值算法
- 栈的应用 算术表达式的计算
- 算术表达式的计算(栈的应用)
- 栈的应用--算术表达式求值
- 栈的应用:解析算术表达式
- 栈的应用之算术表达式
- 栈的应用之算术表达式求值
- 算术表达式计算(栈的应用)
- 《马化腾致合作伙伴的一封信》
- 使用OFBIZ的理由和不使用OFBIZ的理由
- 作业
- 如何有效的限制上传文件类型
- P051第八题
- 栈的一个小应用——Dijkstra的双栈算术表达式
- IOS代理的使用(主要用于视图之间传参)
- Magento搜索结果页缓存策略解析
- iOS多线程GCD使用
- 术语VCL的变更:从VCL到CLX
- IOS应用提交所需的ICON
- 【菜鸟学Opencv 4】-Opencv学习资料(不断更新中)
- word文档是怎么转换成PDF格式的
- vs未找到导入的项目,请确认 <Import> 声明中的路径正确