数据结构(JAVA语言描述第三版)读书笔记

 本书封面如下:

 

 

下面是我觉得有帮助的一些知识:

 

page33 断言
assert contain(a,answer):“maxof Array answer is not equal in the array”; 调用函数执行

 

page72 static method
the static keyword means that the method is not activated by any one object.
无法通过对象调用,必须通过创建的类之间调用。
例如distance为一个static方法,调用时Location.distance而不是p.distance

 

page107 关于数组值的传递
public static void put42s(int[] data)数组均是通过地址传递到函数中,这一点JAVA和C语言是类似的

 

page112 int...elements
public void addMany(int...element)
the method can be called with anynumber of integer arguments.表明输入参数不唯一
addMany(8,4,4) addMany(1,2,3,4,5,6,7,8,9)

 

page133 clone函数
当类中包含数组的时候,clone函数执行需要进行额外的操作,不仅仅是调用a.clone(),需要针对每一个元素调用

 

page233 dummy nodes
在链表操作过程中,如果对链表头结点和尾结点需要进行操作,为了避免错误,可以使用伪头部和伪尾部。位于伪结点中的数据不属于链表。使用好处是头结点和尾结点的引用只需要设定一次即可,以后都可以保持不变,这样避免了考虑各种复杂情况。

 

page244 object类型
Object obj这样可以让obj对象指向任何类型数据,例如
String s=new String("Objection overruled");
Object obj;
obj=s;

 

page248 boxing and unboxing封装和解封
封装是指一个值被转换为一个对象和对应的类型,解封是逆过程,例子

int i=42;
int j;
Integer example;
example = new Integer(i);// boxing
example=i;//autoboxing
j=example.intValue();//unboxing
j=example;//autounboxing


 

page338-340 表达式的中缀转后缀

字符串括号是完整的情况,例如(((A+7)*(B/C))-(2*D))
1.初始化一个栈,用来保存操作符和括号
2.do
   if(下个输入是左括号)
 读取左括号直接放入栈中
   else if(输入是一个数字或其它符号)
 读入然后把它输出
   else if(输入是操作符)
     读入操作符放入栈中
   else
   {
  读入并且抛弃下一个输入(输入肯定是右括号)。栈的顶部肯定有一个操作符,把该操作符弹出并且输出(如果没有操作符就输出错误信息停止)在把操作符弹出后,栈顶端肯定有一个左括号,弹出左括号并抛弃(如果没有表明括号不匹配,给出错误提示信息)
   }  
  while(有字符串可读)
 
3.最后栈肯定为空,否则就输出错误提示信息

字符串中括号不完整的情况,例如2*(A-B)+3+C
1.初始化一个栈,用来保存操作符合括号
2.do
   if(下个输入是左括号)
 读入左括号直接放入栈中
   else if(下个输入是数字或其它符号)
     读入并直接输出
   else if(下个输入是操作符)
   {
     弹出并且打印操作符直到栈出现下面三种情况
  (1)栈为空
  (2)栈中下一个符号是左括号
  (3)栈中的下一个符号和下一个输入符号相比优先级要低
  当出现上面三种情况后,停止出栈操作,读入下一个输入字符,把字符压入栈中
   }
   else
   {
   读入并且抛弃下一个输入(输入肯定是右括号)。栈的顶部肯定有一个操作符,把该操作符弹出并且输出(如果没有操作符就输出错误信息停止)在把操作符弹出后,栈顶端肯定有一个左括号,弹出左括号并抛弃(如果没有表明括号不匹配,给出错误提示信息)
   }
   while(有字符串可读)
 
3.最后栈肯定为空,否则就输出错误提示信息


page409 fractals


 


进行界面绘图时可以调用递归算法进行实现

public static void randomFractal
(
  int leftX,
  int leftY,
  int rightX,
  int rightY,
  Graphics drawingArea
)
{
 final int STOP=4;
 int midX,midY;
 int delta;
 if((rightX-leftX)<=STOP)
   drawingArea.drawLine(leftX,leftY,rightX,rightY);
 else
 {
   midX=(leftX+rightX)/2;
   midY=(leftY+rightY)/2;
   delta=(int)(Math.random()-0.5)*(rightX-leftX);
   midY+=delta;
   randomFractal(leftX,leftY,midX,midY,drawingArea);
   randomFractal(midX,midY,rightX,rightY,drawingArea);
 }
}


 


page591 hash时间
填充因子为α,线性探测平均检查元素个数为: 1/2*(1+1/(1-α))
double hashing 平均检查元素个数为:-ln(1-α)/α
链式哈希 平均检查元素个数为:1+α/2

 

 

以上就是我这本书中获得的一些补充知识

 

后记:这本800页的书花了一个月的时间终于看完了,虽然不是一部很经典的书,但是正好帮我复习一下数据结构。老外的书我觉得很不错,首先给出本章学习要点,明确目标,在结尾还进行总结。还有一点就是这本书不光是为了将数据结构而讲数据结构,还穿插讲了JAVA的一些知识以及面向对象的思想例如继承虚函数这些,这一点是国内图书做不到的。要多读英文书,说的就是这个道理。

 

你可能感兴趣的:(Reading,notes)