《java數據結構和算法》讀書筆記

《Java多線程編程核心技術》讀書筆記

經常使用數據結構

  1. 第2章 數組
    最簡單的數據結構,在查找上比鏈表有優點,可是在插入與刪除上比不上鍊表。
    Java中的數組有長度限制,爲int值。在內存模型中,Array對象頭正好有4個字節存儲Array的長度。算法

  2. 第5章 鏈表 最簡單的數據結構,優缺點與數組正好相反。由每一個結點構成,每一個結點指向下一個結點。
    若是鏈表存儲了鏈表的頭與尾就叫雙端鏈表。若是結點不只指向下一個結點,還存儲上一結點引用那這個鏈表就是雙向鏈表。編程

  3. 第4章 棧與隊列 棧是先入後出,隊列是先入後出。二者可由數組與鏈表實現。數組

經常使用算法

  1. 第3章 簡單排序 冒泡排序、選擇排序、插入排序三種。時間複雜度上平均狀況$O(N^2)$:$O(N^2)$:$O(N^2)$,最壞的狀況是$O(N^2)$:$O(N^2)$:$O(N^2)$。可是實際狀況是插入>選擇>冒泡。插入要比冒泡快一倍。數據結構

  2. 第6章 遞歸 在Java中來講,就是方法調用方法自己。與其對應的動態歸化。多線程

  3. 第7章 高級排序 歸併排序、希爾排序、快速排序三種。時間複雜度上平均狀況$O(NlogN)$:$$O(N^{3/2})$$:$O(NlogN)$,最壞的狀況是$O(N*logN)$:$$O(N^{3/2})$$:$O(N^2)$。歸併排序須要額外的空間,希爾是插入排序的一個變種,快速排序是六種排序中最好的算法。線程

中級數據結構

  1. 第8章 二叉樹 二叉搜索樹的每一個結點的左子節點的關鍵字值小於這個節點,右子節點的關健字值大於或等於這個節點。 遍歷樹有三種:中序、前序、後序。
B
	/	\
	A	C

中序: ABC
前序: BAC
後序: ACBcode

  1. 第12章 堆 堆是一個徹底二叉樹,通常由數組實現,堆中每一個節點的關鍵字都大於子節點的關鍵字。
    堆中,一個節點的爲2n+1與2n+2,一個節點的父節點是(n-1)/2。
    當插入時,節點從下向上冒,刪除時,節點從上向上拉。對象

  2. 第11章 哈希表 哈希表是將巨大的數字空間壓縮成較小的數字空間。在不一樣的語言有不一樣的叫法,如字典dict,映射Map等。
    若是出現衝突有兩種方案,一是開放地址法,二是開放地址法。排序

複雜數據結構

  1. 第13章 圖 樹是圖的一種,圖的搜索分爲深度優先(DFS)與廣度優先(BFS)。
    深度優先:訪問一個鄰接未訪問的頂點,標記它,並放入棧中;當沒有可訪問以後,從棧中彈出一個頂點;當棧中沒有頂點時,搜索結束。
    廣度優先:訪問一個鄰接未訪問的頂點,這個頂點必須是當前點的鄰接點,標記它,並放入隊列中;若是當前頂點沒有鄰接點,那就從隊列中取一個頂點爲當前頂點;若是隊列爲空,搜索結束。遞歸

  2. 第9章 紅黑樹、第10章 2-3-4樹與外部存儲、第14章 帶權圖 好吧,這三個都有點難了,我暫時卻步了。

相關文章
相關標籤/搜索