更多文章,歡迎關注微信公眾號:深夜程猿
什麼是資料結構
資料結構,是資料的組織形式,包括資料元素本身以及資料元素之間的關係,公式可表示為Data_Structure={D, R},其中D表示資料,R表示關係。資料結構具有邏輯結構和物理結構。
邏輯結構
邏輯結構是資料和資料之間的邏輯關係,實際就是它們之間的位置關係。比如資料A和資料B,資料A和資料B是相鄰著儲存著,資料A儲存在資料B前面。這樣資料A資料B的邏輯關係就是相鄰的並且A在B前面。(但是實際的儲存A和B並不一定是物理連續的,因為相同的邏輯結構可以有不同的物理結構儲存資料)。
資料的邏輯結構分類:
- 集合關係:資料結構中的元素都屬於同一個資料集合
- 線性關係:資料結構中的元素存在一對一的相互關係,比如上面說的A元素後面是B元素
- 樹形關係:資料結構中的元素存在一對多關係。比如在資料A前面是資料C,後面是資料B,那麼資料A和資料B、C就是一對多的關係
- 圖形關係:資料結構中的元素存在多對多的關係。比如資料A後面是資料B,資料A前面是資料C,資料C前面是資料B,那麼資料A、B、C就是多對多關係
下面一張圖表示資料的邏輯結構:
物理結構
物理結構是資料在真實磁碟空間上的儲存方式,是資料的具體儲存方式。一個邏輯結構可以有不同儲存方式,也就是一個邏輯結構對應多種物理結構。比如邏輯結構相鄰的資料,在物理結構上可以是相鄰的(陣列儲存),也可以是不相鄰的(連結串列儲存,通過一種叫做指標的東西連線起來)。下面是百度百科的解釋:
“資料的物理結構是資料結構在計算機中的表示(又稱映像),它包括資料元素的機內表示和關係的機內表示。由於具體實現的方法有順序、連結、索引、雜湊等多種,所以,一種資料結構(這裡是指邏輯結構)可表示成一種或多種儲存結構。
資料元素的機內表示(映像方法): 用二進位制位(bit)的位串表示資料元素。通常稱這種位串為節點(node)。當資料元素有若干個資料項組成時,位串中與個資料項對應的子位串稱為資料域(data field)。因此,節點是資料元素的機內表示(或機內映像)。
關係的機內表示(映像方法):資料元素之間的關係的機內表示可以分為順序映像和非順序映像,常用兩種儲存結構:順序儲存結構和鏈式儲存結構。順序映像藉助元素在儲存器中的相對位置來表示資料元素之間的邏輯關係。非順序映像藉助指示元素儲存位置的指標(pointer)來表示資料元素之間的邏輯關係。”
物理結構儲存方式:
- 順序儲存
- 鏈式儲存
- 索引儲存
- 雜湊儲存
資料結構的分類
資料結構有以下幾種分類,不瞭解的讀者只需對名稱有個印象即可
- 集合結構
- 線性結構:線性表
- 樹形結構:樹
- 圖形結構:圖
小結
資料結構分為邏輯結構和物理結構,邏輯結構描述的是資料的邏輯關係,比如是相鄰的還是不相鄰的。物理結構是資料在計算機系統的具體儲存形式。一種邏輯結構可以有不同的物理結構實現。
在計算機中,資料採取不同的物理結構儲存,需要計算機硬體的支援。
有一句話說,演算法+資料結構=程式。這句話是否誇大我們不進行討論,但是資料結構在我們的程式中起到了非常重要的作用。一個良好的資料結構,可以使得我們的程式更加高效執行,資料儲存更加有效。
我們可以這樣理解(但不嚴謹),演算法解釋了程式如何執行,什麼時候做什麼都已經定義好了,而資料結構規定了程式的資料如何組織。
什麼是程式?程式就是我們使用程式語言編寫的原始碼檔案。