基礎數據結構對比 數組、鏈表、棧、隊列

數組

數組分爲靜態數組和動態數組,有着查詢複雜度爲O(1)的優點。

  • 靜態數組:最簡單的數組實現
  • 動態數組:動態數組相較於普通數組,具有動態擴容的特性。當size等於數組大小時對數組擴容,以當前大小的2倍進行擴大。當size等於數組大小的1/4時,將數組縮小一半。利用均攤複雜度分析,擴容和縮容複雜度都爲O(1)。

鏈表

鏈表雖然查詢需要遍歷整個鏈表,複雜度爲O(n),但是鏈表是真正的動態數據結構,不用擔心容量的問題

棧的實現可以爲基於數組的棧和基於鏈表的棧,棧的應用很多,有JVM的虛擬機棧和計算器的運算以及word文檔的撤回功能等等。

隊列

隊列是一種先進先出的數據結構,具體實現有三種

  • 基於動態數組實現的隊列
    作爲最簡單的實現,它在性能上有着十分突出的缺點,那就是出隊列的這個操作複雜度爲O(n),對於隊列來說會頻繁入隊出隊,每次出隊都是O(n)是十分不好的。
  • 基於靜態數組的循環隊列
    循環十分巧妙的運行的取餘(%)這個算數符號,維護了兩個引用,分別指向隊首和隊尾,出隊和入隊操作僅僅只是維護了一下這兩個引用。同時在擴容和縮容時也需要注意這隊首一樣大的偏移量。
  • 基於鏈表實現的隊列
    鏈表的隊列我們會發現在頭節點,添加和刪除節點都是比較容易的,但是在尾節點,添加節點比較容易,刪除節點比較複雜。所以若要實現隊列,我們也應維護兩個節點,一個是尾節點,一個是頭節點,其中頭節點進行刪除操作,扮演隊首的角色,尾節點進行添加操作,扮演隊尾。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章