博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之计算器的实现(JAVA)(四)
阅读量:7114 次
发布时间:2019-06-28

本文共 2363 字,大约阅读时间需要 7 分钟。

   原理:

       1.将中序表达式变化兴许表达式

       2.当前字符为数字,将该数字放入栈中

       3.当前字符为操作符,从栈中取出两个树,依据操作符来运算,将运算结果放入到栈中

       4.反复,直到将字符操作完。此时栈中仅仅剩下一个元素,即要运算的结果

   PS:我没有处理。仅仅能够执行10以内的运算,假设有须要能够扩展

      

package com.lip.datastructure.tree;import java.util.Iterator;import java.util.Stack;public class Calculator	{		public static void main(String[] args)			{				String obj = "a*(b+c)+c/d";				String obj1 = "2*(1+3)+9/3";								System.out.println(obj1+"="+calculator(obj1));			}		//利用后序表达式计算		///原理:1.当期字符为字母或者数字,则直接入栈		//      2.当前字符为操作符则从栈中取出两个数字计算		//      3.将计算结果再放入到栈中,栈中最后剩余的一个元素就是要求的结果		public static int calculator(String obj)		{			String postObj=tranform(obj);			System.out.println();			Stack
stack=new Stack
(); for(int i=0;i
stack = new Stack
(); String obj2 = ""; for (int i = 0; i < obj.length(); i++) { char ch = obj.charAt(i); if (Character.isLetterOrDigit(ch))// 字母或数字直接输出 { obj2 += ch; System.out.print(ch); } else if (ch == ')')// 在栈中一致匹配到)操作符才停止出栈 { char temp; while ((temp = stack.pop()) != '(') { obj2 += temp; System.out.print(temp); } } else // 比較操作符的进栈优先级 { if (stack.isEmpty()) { stack.push(ch); continue; } char temp = stack.peek(); while (icp(ch) <= isp(temp))// 进栈优先级小于栈内优先级,则一直出栈 { System.out.print(temp); obj2 += temp; stack.pop(); if (stack.isEmpty()) break; temp = stack.peek(); } stack.push(ch); } } // 将栈中剩余的元素弹出来 while (!stack.isEmpty()) { char temp = stack.pop(); obj2 += temp; System.out.print(temp); } return obj2; } // 操作符在栈内的优先级 private static int isp(char ch) { switch (ch) { case '+': case '-': return 2; case '*': case '/': return 4; case ')': return 7; case '(': return 1; default: break; } return 0; } // 操作符进栈的优先级优先级 private static int icp(char ch) { switch (ch) { case '+': case '-': return 3; case '*': case '/': return 5; case ')': return 1; case '(': return 7; default: break; } return 0; } }

你可能感兴趣的文章
深入理解Sping——AOP的试水
查看>>
Android NDK 开发(四)JNI 中局部引用、全局引用和弱全局引用
查看>>
你可能不知道的10条SQL技巧
查看>>
JavaScript的那些书
查看>>
Activity 生命周期(阅读官方文档后录)
查看>>
如何在Node.js中使用WebAssembly
查看>>
Grails In Action-05.Retrieving the data you need
查看>>
Java正则表达式校验用户信息
查看>>
IOS--设置导航A-B返回按钮文字
查看>>
香蕉派banana pi 参加2015 台北创客周
查看>>
Storm(二)demo
查看>>
程序员必须知道的10大基础实用算法及其讲解
查看>>
杭电2008
查看>>
如何理解 阻塞 非阻塞 同步 异步 的区别?
查看>>
sql命令(五)-子查询与连接
查看>>
CentOS6.5下Redis安装与配置
查看>>
JSP+JDBC_假分页
查看>>
mac实战mesos
查看>>
MacOS下给树莓派安装Raspbian系统
查看>>
Linux强制重启
查看>>