數組
數組分爲靜態數組和動態數組,有着查詢複雜度爲O(1)的優點。
- 靜態數組:最簡單的數組實現
- 動態數組:動態數組相較於普通數組,具有動態擴容的特性。當size等於數組大小時對數組擴容,以當前大小的2倍進行擴大。當size等於數組大小的1/4時,將數組縮小一半。利用均攤複雜度分析,擴容和縮容複雜度都爲O(1)。
鏈表
鏈表雖然查詢需要遍歷整個鏈表,複雜度爲O(n),但是鏈表是真正的動態數據結構,不用擔心容量的問題
棧
棧的實現可以爲基於數組的棧和基於鏈表的棧,棧的應用很多,有JVM的虛擬機棧和計算器的運算以及word文檔的撤回功能等等。
隊列
隊列是一種先進先出的數據結構,具體實現有三種
- 基於動態數組實現的隊列
作爲最簡單的實現,它在性能上有着十分突出的缺點,那就是出隊列的這個操作複雜度爲O(n),對於隊列來說會頻繁入隊出隊,每次出隊都是O(n)是十分不好的。 - 基於靜態數組的循環隊列
循環十分巧妙的運行的取餘(%)這個算數符號,維護了兩個引用,分別指向隊首和隊尾,出隊和入隊操作僅僅只是維護了一下這兩個引用。同時在擴容和縮容時也需要注意這隊首一樣大的偏移量。 - 基於鏈表實現的隊列
鏈表的隊列我們會發現在頭節點,添加和刪除節點都是比較容易的,但是在尾節點,添加節點比較容易,刪除節點比較複雜。所以若要實現隊列,我們也應維護兩個節點,一個是尾節點,一個是頭節點,其中頭節點進行刪除操作,扮演隊首的角色,尾節點進行添加操作,扮演隊尾。