本書封面如下:
下面是我覺得有協助的一些知識:
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);// boxingexample=i;//autoboxingj=example.intValue();//unboxingj=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的一些知識以及物件導向的思想例如繼承虛函數這些,這一點是國內圖書做不到的。要多讀英文書,說的就是這個道理。