那麽,該如何選擇呢?數據存儲結構的選擇取決於兩個方面,即數據的邏輯結構和存儲結構(也稱物理結構)。
邏輯結構
數據的邏輯結構,簡單理解就是指數據之間的邏輯關系。
家庭成員關系圖
圖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,它們之間的關系是“多對多”;
通過學習數據結構,我們可以了解到三種存儲結構分別存儲這三種邏輯關系的數據,換句話說:
線性表用於存儲“壹對壹”邏輯關系的數據;
樹形結構用於存儲“壹對多”關系的數據;
圖結構用於存儲“多對多”關系的數據;
由此,我們可以通過分析數據之間的邏輯關系來決定使用哪種存儲結構,但使用順序存儲還是鏈式存儲取決於數據的物理結構。
存儲結構(物理結構)
數據的存儲結構,也就是物理結構,是指數據在物理存儲空間上的集中存儲或分散存儲的選擇。假設要存儲大小為10G的數據,集中存儲如圖3a)所示,分散存儲如圖3b)所示。
數據的物理存儲模式
圖3數據的物理存儲模式
如果選擇集中存儲,則使用順序存儲結構;相反,使用鏈式存儲。至於如何選擇,主要看存儲設備的狀態和數據的用途。
我們知道,集中式存儲(底層實現使用陣列)需要使用大量連續的物理空間。假設要存儲大小為1G的數據,如果存儲設備上沒有整體大小超過1G的空間,則不能使用順序存儲。這時候應該選擇鏈式存儲,因為鏈式存儲是數據的隨機存儲,在存儲設備中占用的存儲空間比較小,所以有壹定幾率可以存儲成功。
而且數據的不同用途會導致不同的存儲結構。數據集中存儲有利於後期遍歷數據,分散存儲更有利於後期添加或刪除數據。所以如果後期需要大量的數據檢索(遍歷),選擇集中存儲;另壹方面,如果後期需要進壹步更新(添加或刪除)數據,則選擇分散存儲。