數據結構詳解


前言:平時我們敲代碼都會涉及到數據結構,但是真正深入數據結構的時候,又有一種模糊感,下面讓我們來詳細理解下。

說到數據結構,我們都會談到線性結構和非線性結構。

1.線性結構:是一個有序數據元素的集合。它應該滿足下面的特征:

  • 集合中必存在唯一的一個“第一個元素”
  • 集合中必存在唯一的一個“最后的元素”

  • 除最后一元素之外,其它數據元素均有唯一的“后繼
  • 除第一個元素之外,其它數據元素均有唯一的“前驅”

我們知道符合條件的數據結構就有棧、隊列和其它。

2.非線性結構:其邏輯特征是一個節點元素可以有多個直接前驅或多個直接后繼。

那么,符合條件的數據結構就有圖、樹和其它。

 

好了,下面進入正題

一、數組

數組是一種線性結構,以十二生肖(鼠、牛、虎、兔、龍、蛇、馬、羊、猴、雞、狗、豬)排序為例:如下圖

優點:
  1、存儲多個元素,比較常用
  2、訪問便捷,使用下標[index]即可訪問

缺點:
  1、數組的創建通常需要申請一段連續的內存空間,並且大小是固定的(大多數的編程語言數組都是固定的),所以在進行擴容的時候難以掌控。
  2、一般情況下,申請一個更大的數組,會是之前數組的倍數,比如兩倍。然后,再將原數組中的元素復制過去
  3、插入數據越是靠前,其成本很高,因為需要進行大量元素的位移。

 

二、棧

棧是一種后進先出(LIFO)線性表,是一種基於數組的數據結構。(ps:其實后面講到的數據結構或多或少有數組的影子)

說明:
  1、LIFO(Last In First Out)表示后進先出,后進來的元素第一個彈出棧空間。類似於自動餐托盤,最后放上去的托盤,往往先被拿出來使用。
  2、僅允許在表的一端進行插入和移除元素。這一端被稱為棧頂,相對地,把另一端稱為棧底。如下圖的標識。
  3、向一個棧插入新元素稱作進棧、入棧或壓棧,這是將新元素放在棧頂元素上面,使之成為新的棧頂元素。
  4、從一個棧刪除元素又稱為出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

  示意圖

  

三、隊列

隊列是一種先進先出(FIFO)受限的線性表。受限體現在於其允許在表的前端(front)進行刪除操作,在表的末尾(rear)進行插入【優先隊列這些排除在外】操作。

  示意圖

 

四、鏈表

鏈表是由一組節點組成的集合。每個節點都使用一個對象的引用指向它的后繼。

和數組的區別:
  1、鏈表亦可以存儲多個元素,而且存儲的元素在內容中不必是連續的空間。
  2、在插入和刪除數據時,時間復雜度可以達到O(1)。
  3、在查找元素的時候,還是需要從頭開始遍歷的,比數組在知道下標的情況下要快,但是數組如果不確定下標的話,那就另說。

  示意圖

  

 

五、字典

字典的主要特點是鍵值一一對應的關系。可以比喻成我們現實學習中查不同語言翻譯的字典。

這里字典的鍵(key)理論上是可以使用任意的內容,但還是建議語意化一點

  示意圖

 

六、集合

集合通常是由一組無序的,不能重復的元素構成,一些常見的集合操作。

  示意圖

 

七、散列表/哈希表

說明:Hash 表又稱散列表,通過把關鍵字Key 映射到數組中的一個位置來訪問記錄,以加快查找速度。這個映射函數稱為Hash函數,存放記錄的數組稱為Hash表。

散列是一種常用的存儲技術,散列使用的數據結構叫做散列表/哈希表。 在散列表上插入、刪除和取用數據都非常快,但是對於查找操作來說卻效率低下,比如查找一組數據中的最大值和最小值。查找的這些操作得求助其它數據結構。

  示意圖

八、樹

 

樹(Tree):n(n >= 0)個節點構成的有限集合。
    1、當`n = 0`時,稱為空樹。
    2、對任意一棵空樹`(n > 0)`,它具備以下性質:
    3、樹中有一個稱為根(Root)的特殊節點,用`r(root)`表示;
    4、其余節點可分為`m(m > 0)`個互不相交的有限集`T1,T2,…Tm`,其中每個集合本省又是一棵樹,稱為原來樹的子樹(SubTree)

注意:
    1、子樹之間`不可以相交`;
    2、除了根節點外,每個節點有且僅有一個父節點;
    3、一個`N`個節點的樹有`N-1`條邊。

  示意圖

 

九、圖

定義:圖由邊的集合及頂點的集合組成。

關於相關術語,請自行查找

  示意圖

 

以上就是本篇文章的全部內容了,僅供自己學習。

 

參考文章:

作者:嘉明

來源 | https://github.com/reng99/blogs

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM