《java 數據結構和算法第二版讀後感》

《第一章》

數據結構的特性:

數據結構 優點 缺點
數組 插入快,如果知道下標,可以非常快速的存取 查找慢,刪除慢,大小固定
有序數組 比無序的數組查找快 刪除和插入慢,大小固定
提供後進先出的方式存取 存取其他項很慢
插入,刪除快,對最大數據項的存取很快 對其他數據項存取慢
隊列 提供先進先出的方式存取 存取其他項很慢
鏈表 插入快,刪除快 查找慢
二叉樹 查找,插入,刪除都快(如果樹保持平衡) 刪除算法複雜
紅黑樹 查找,插入,刪除都快(樹總是保持平衡) 算法複雜
2-3-4樹 查找,插入,刪除都快(樹總是保持平衡,類似的樹對磁盤存儲有用) 算法複雜
哈希表 如果關鍵字已知則存取極快,插入快 刪除慢,如果不知道關鍵字則存取很慢,對存儲空間使用不充分
對現實世界進行建模 有些算法慢且複雜

軟件工程的整個生命週期:分析,設計,驗證,編碼,測試,生產,維護。

java 和 c++ 最大不同就在於java沒有指針。

BankAccount bc1; bc1 存儲了一個對象的地址,而不是保存對象的數據。bc1 是對象的一個引用,它並不是對象本身。如果對象沒有被複制,它就不會成爲引用。在賦值爲某個對象之前,它保存一個被稱爲null 的特殊對象的引用。

垃圾回收:用new 向系統申請空間後,不需要對釋放空間擔心。java每隔一段時間就會查看每一塊由new 開闢的內存,看指向它的有效引用是否依舊存在。如果這個引用不存在,系統就會自動的將這塊空間歸入空閒內存區,這個過程被稱爲垃圾回收。

char[字符]型是無符號的,採用兩個字節的空間表示Unicode 字符集,這個字符集可以處理國際通用的字符。

數組可以分爲:線性查找和二分查找

注意:二分查找比線性查找要快。

有序數組:有序數組查找的速度比無序數組快,但是在插入的操作中由於所有靠後的數據都需要移動以騰開空間,所以速度較慢。有序數據和無序數據的刪除都很慢,因爲數據項必須向前移動來填補已刪除的數據項。

有序數據在查找頻繁的時候十分有效,但是插入和刪除也較爲頻繁時,則無法高效工作。

數組的運行時間比較
算法 大O表示運行的時間
線性查找 O(N)
二分查找 O(logN)
無序數組的插入 O(1)
有序數組的插入 O(N)
無序數組的刪除 O(N)
有序數組的刪除 O(N)

總結:

1.java中的數組是對象,由new 操作符創建
2.無序數組可以快速的插入,但是查找和刪除慢
3.將數組封裝到類中可以保護數組不被隨意更改
4.類的接口由類用戶可訪問的方法組成
類的接口被設計成類用戶的操作更加簡單
5.有序數組可以使用二分查找
6.線性查找需要的時間和數組中數據項的個數成正比
7.二分查找需要的時間與數組中數據項的對數成正比
8.大O表示法比較算法的速度提供了一種方便的方法
9.O(1)級時間的算法是最好的,O(logN)次之,O(N)爲一般,O(N²)最差。

排序包括:線性排序,二分排序,冒泡排序,選擇排序,插入排序,希爾排序,快速排序。

冒泡排序:運行非常慢,但是最簡單。與旁邊的比較,若小靠左,若大靠右。

選擇排序:選擇排序是對冒泡排序的改進,比冒泡排序快,比插入排序慢。

插入排序:比冒泡排序快一倍,比選擇排序複雜點。

1.鏈表包含一個linkedList和許多Link對象

2.linkedList 對象包含一個引用,這個引用通常叫做first,它指向鏈表的第一個鏈結點。

3.每個link 對象包含數據和一個引用,通常叫做next,它指向鏈表的下一個鏈結點。

4.next字段爲null值意味着鏈表的結尾。

5.在表頭刪除鏈結點要把first指向first.next。

6.爲了遍歷鏈表,從first開始,然後從一個鏈結點到下一個鏈結點,方法是用每個鏈結點的next字段找到下一個鏈結點。

7.通過遍歷鏈表可以找到擁有特定值的鏈結點,一旦找到,可以顯示,刪除或用其他方式操縱該結點

8.新鏈結點可以插在某個特定值的鏈結點的前面或者後面,首先要遍歷找到這個鏈結點。

9.雙端鏈表在鏈表中維護一個指向最後一個鏈結點的引用,它通常和first一樣,叫做last。

10.雙端鏈表允許在表尾插入數據項

11.抽象數據類型是一種數據存儲類,不涉及它的實現

12.棧和隊列時ADT,他們既可以用數組實現,又可以用鏈表實現

13.有序鏈表中,鏈結點按照關鍵值升降序排序

14.雙向鏈表允許反向遍歷,並可以從表尾刪除

15.迭代器是一個引用,它被封裝在類對象中,這個引用指向相關聯的鏈表中的鏈結點。

16.迭代器方法允許使用者沿鏈表移動迭代器,並訪問當前指示的鏈結點。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章