ScalersTalk成长会 2017-11-29
栈是计算后缀表达式时使用的理想数据结构
public class PostfixEvaluator { private final char ADD ='+',SUBTRACT='-'; private final char MULTIPLY='*',DIVIDE='/'; private LinkedStack<Integer> stack; public PostfixEvaluator () { stack=new LinkedStack <Integer> (); } public int evaluate (String expr) { int op1,op2,result=0; String token; Scanner tokenizer = new Scanner ( expr ); while (tokenizer.hasNext ()){ token=tokenizer.next (); if (isOperator(token)){ op2=(stack.pop ()).intValue (); op1=(stack.pop ()).intValue (); result=evalSingleOp(token.charAt ( 0 ),op1,op2); stack.push ( result ); } else stack.push ( Integer.parseInt ( token ) ); } return result; } private boolean isOperator(String token){ return (token.equals ( "+" )||token.equals ( "-" )||token.equals ( "*" )||token.equals ( "/" )); } private int evalSingleOp(char operation,int op1,int op2){ int result=0; switch (operation){ case ADD: result=op1+op2; break; case SUBTRACT: result=op1-op2; break; case MULTIPLY: result=op1*op2; break; case DIVIDE: result=op1/op2; } return result; } }
用代码来理解
/** * 为数据结构线性表自定义的抽象数据类型 * 在Java中,抽象数据类可以使用接口来描述 * 线性表接口LList,描泛型参数T表示数据元素的数据类型 */ public interface LList<T> //线性表接口,泛型参数T表示线性表中的数据元素的数据类型 { boolean isEmpty(); //判断线性表是否空 int length(); //返回线性表长度 T get(int i); //返回第i(i≥0)个元素 void set(int i, T x); //设置第i个元素值为x void insert(int i, T x); //插入x作为第i个元素 void append(T x); //在线性表最后插入x元素 T remove(int i); //删除第i个元素并返回被删除对象 void removeAll(); //删除线性表所有元素 T search(T key); //查找,返回首次出现的关键字为key元素 String toString(); //返回显示线性表所有元素值对应的字符串 }
抽象数据类型的定义仅取决于它的逻辑特性,而与其在计算机内部的实现无关,即无论它的内部结构如何变化,只要它的逻辑特性不变,都不会影响到它的使用。其内部的变化(抽象数据类型实现的变化)只是可能会对外部在使用它解决问题时的效率上产生影响,因此我们的一个重要任务就是如何简单、高效地实现抽象数据类型。很明显,对于不同的运算组,为使组中所有运算的效率都尽可能地高,其相应的数据模型具体表示的选择将是不同的。在这个意义下,数据模型的具体表示又依赖于数据模型上定义的那些运算。特别是,当不同运算的效率互相制约时,还必须事先将所有的运算的相应使用频度排序,让所选择的数据模型的具体表示优先保证使用频度较高的运算有较高的效率。
加入此段代码
if (expression != null && expression.matches("^[0.0-100.0]+$")) {// [0-100]没办法识别小数,[0.0-100.0]可以识别小数和整数 System.out.println("输入是数字!"); double num = Double.parseDouble(expression); System.out.println(num); } else { System.out.println("输入值为字符!");
- [20162303](http://www.cnblogs.com/syx390234975/) - 结对学习内容 - 学习第十四章 - 研究上课时讲的ppt
一定好好学习java!!
前一段时间有点忙,现在不怎么忙,我要专心学习
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 68/68 | 1/1 | 12/12 | |
第三周 | 298/366 | 2/3 | 18/30 | |
第五周 | 688/1162 | 2/5 | 20/50 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
参考:软件工程软件的估计为什么这么难,软件工程 估计方法
计划学习时间:20小时
实际学习时间:20小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导
JDK帮助文档
java集合类详解