1. 程式人生 > >資料的邏輯結構和儲存結構(物理結構)詳解

資料的邏輯結構和儲存結構(物理結構)詳解

資料結構有哪些》一節講到,資料的儲存方式可分為線性表、樹和圖三種儲存結構,而每種儲存結構又可細分為順序儲存結構和鏈式儲存結構。資料儲存方式如此之多,針對不同型別的資料選擇合適的儲存方式是至關重要的。

那麼,到底如何選擇呢?資料儲存結構的選擇取決於兩方面,即資料的邏輯結構儲存結構(又稱物理結構)

邏輯結構

資料的邏輯結構,簡單地理解,就是指的資料之間的邏輯關係。
家庭成員關係圖
圖 1 家庭成員關係圖
例如,圖 1 顯示是一張家庭的成員關係圖,從圖中可以看到,張平、張華和張群是兄弟,他們的父親是張亮,其中張平有兩個兒子,分別是張晶和張磊。

以上所說,父子、兄弟等這些關係都指的是資料間的邏輯關係,假設我們要儲存這樣一張家庭成員關係圖,不僅要儲存張平、張華等資料,還要儲存它們之間的關係,兩者缺一不可。

一組資料成功儲存到計算機的衡量標準是要能將其完整的復原。例如圖 1 所示的成員關係圖,如果所儲存的資料能將此成員關係圖徹底復原,則說明資料儲存成功。

“多對多”關係示意圖
圖 2 “多對多”關係示意圖
資料之間的邏輯關係可細分為三類,“一對一”、“一對多”和“多對多”:
  • “一對一”:類似集合 {1,2,3,...,n} 這類的資料,每個資料的左側有且僅有一個數據與其相鄰(除 1 外);同樣,每個資料的右側也只有一個數據與其相鄰(除 n 外),所有的資料都是如此,就說資料之間是“一對一”的邏輯關係;
  • “一對多”:圖 1 中的資料就屬於“一對多”,因為對於張平來說,有且僅有一個父親(張亮),但是有 2(多)個孩子;
  • “多對多”:拿圖 2 來說,從 V1 可以到達 V2、V3、V4,同樣,從 V2、V3、V4 也可以到達 V1,對於V1、V2、V3和V4來說,它們之間就是“多對多”的關係;

通過學習資料結構,我們可以學到 3 種儲存結構分別儲存這 3 類邏輯關係的資料,換句話說:
  1. 線性表用於儲存具有“一對一”邏輯關係的資料;
  2. 樹結構用於儲存具有“一對多”關係的資料;
  3. 圖結構用於儲存具有“多對多”關係的資料;

由此,我們可以通過分析資料之間的邏輯關係來決定使用哪種儲存結構,但具體使用順序儲存還是鏈式儲存,還要通過資料的物理結構來決定。

儲存結構(物理結構)

資料的儲存結構,也就是物理結構,指的是資料在物理儲存空間上選擇集中存放還是分散存放。假設要儲存大小為 10G 的資料,則集中存放就如圖 3a) 所示,分散存放就如圖 3b)所示。
資料的物理儲存方式
圖 3 資料的物理儲存方式
如果選擇集中儲存,就使用順序儲存結構;反之,就使用鏈式儲存。至於如何選擇,主要取決於儲存裝置的狀態以及資料的用途。

我們知道,集中儲存(底層實現使用的是陣列)需要使用一大塊連續的物理空間,假設要儲存大小為 1G 的資料,若儲存裝置上沒有整塊大小超過 1G 的空間,就無法使用順序儲存,此時就要選擇鏈式儲存,因為鏈式儲存是隨機儲存資料,佔用的都是儲存裝置中比較小的儲存空間,因此有一定機率可以儲存成功。

並且,資料的用途不同,選擇的儲存結構也不同。將資料進行集中儲存有利於後期對資料進行遍歷操作,而分散儲存更有利於後期增加或刪除資料。因此,如果後期需要對資料進行大量的檢索(遍歷),就選擇集中儲存;反之,若後期需要對資料做進一步更新(增加或刪除),則選擇分散儲存。

至於為什麼,我們會在詳解兩種儲存結構時告知大家。