1. 程式人生 > >《資料結構》第三篇、資料結構中儲存結構

《資料結構》第三篇、資料結構中儲存結構

創:戰紀.jpeg
創:戰紀.jpeg

資料結構除了按照邏輯結構來分,還可以按照儲存結構來分。
儲存結構反應的是資料元素在計算機中的儲存形式,如何在計算機中正確的描述資料元素之間的邏輯關係,才是資料結構的關鍵和重點。

常用的儲存結構有

1、順序儲存結構

2、鏈式儲存結構

3、索引儲存結構

4、散列表

4種,接下來分別介紹一下

順序儲存結構

順序儲存結構是把邏輯上相鄰的結點儲存在

地址連續

的儲存單元裡,資料元素之間的關係由儲存單元是否相鄰來體現。
順序儲存結構通常用高階語言上的

陣列

來描述,資料的邏輯關係與物理關係是一致的。
以陣列 int a[5]={100,20,3,,56,266}為例,其中的元素a[0]到a[4]邏輯上是連線的,在儲存器中的實體地址也是連續的,正如下圖所示


順序儲存結構.png
順序儲存結構.png

解釋一下,上圖中的地址間隔4個,是因為int型別佔用的位元組數是4個位元組

使用順序儲存結構儲存資料時,系統為資料元素分配一段連續的地址空間。

優點

順序儲存結構可以提高空間利用率,而且對於隨機訪問元素,其效率非常高,因為邏輯上相鄰的資料元素,其儲存地址也是緊鄰的,所以可以按照元素序號快速查詢到某一個元素。

缺點

但是,也正因為如此,如果想要對順序儲存結構實現元素的插入和刪除,其效率則非常低。因為如果要插入一個元素,需要將這個位置之後的所有元素都向後移動一個位置;同樣,如果想要刪除一個元素,需要將這個位置之後的所有元素都向前移動一個位置。

需要注意的地方

順序儲存結構在使用時有空間限制,當需要存取元素的個數多於預先分配的空間時,會出現“溢位”的問題;
而當元素個數小於預先分配的空間時,又會造成空間浪費。

2、鏈式儲存結構

鏈式儲存結構在空間上是一些不連續的儲存單元,這些儲存單元的邏輯關係通過附加的指標欄位來表示,如C或者C++語言中的指標型別,通過這些指標的指向來表明結點之間的聯絡。

如下圖所展示的就是鏈式儲存結構的示意圖
下方這張圖展示的是指向後繼元素的鏈式儲存結構圖


指向後繼元素的鏈式儲存結構.png
指向後繼元素的鏈式儲存結構.png

上圖中,我們看到,前一個元素可以通過當前結點來找到後邊的元素
下方這張圖展示的是指向前驅和後繼元素的鏈式儲存結構圖


指向前驅和後繼元素的鏈式儲存結構.png
指向前驅和後繼元素的鏈式儲存結構.png
上圖中,發現可以通過前邊的元素查詢後邊的元素,也可以通過後邊的元素查詢前邊的元素

上面的兩張圖展示的儲存結構 分別是單向連結串列、雙向連結串列

一般而言,連式儲存在記憶體中分配的單元是不連續的,就像散落的珠子,需要用絲線(指標)串起來,這種結構更有利於元素的插入和刪除。當要在某一位置插入一個新元素,比如將上圖“指向後繼元素的鏈式儲存結構”的E、C之間插入一個元素T,只需斷開E、C之間的連線,然後將E的指標指向T,將T的指標指向C即可,插入完成後的序列如下圖所示:


插入元素T.png
插入元素T.png

這樣在插入元素時不必移動任何一個元素,高效簡潔。
同理,在刪除某一個元素時,只需要將其前後兩個元素連線起來即可,無須移動其他元素。

缺點

鏈式儲存結構無法進行元素的隨機訪問
對於連式儲存結構而言,控制元件利用率也比較低,因為分配的記憶體單元有一部分被用來儲存結點之間的邏輯關係。
但是鏈式儲存在儲存元素時沒有空間限制,順序儲存與鏈式儲存都是按需分配,只是鏈式儲存由於其特性(元素的記憶體地址可以不連續 ),所以可以在需要的時候方便的分配空間,不會造成空間不足或者浪費。

3、索引儲存結構

這種儲存結構主要是為了方便查詢資料,它通常是在儲存結點資訊的同時,還建立附加的索引表。
索引表中的每一項稱為“索引項”,它由兩個欄位組成:

關鍵字

地址

其中”關鍵字“唯一標識一個結點,地址是指向結點的指標。這種結構類似於人們常用的字典,該結構如下圖所示


索引儲存結構.png
索引儲存結構.png

這種索引表”一個索引項對應一個結點“,叫做”稠密索引“。
如果索引表中”一個索引項對應一組結點“,則叫做”稀疏索引”,稀疏索引如下圖所示


稀疏索引.png
稀疏索引.png

索引表可以快速的對資料進行隨機訪問,又因為在進行資料的插入和刪除時,只需要更改索引表中的地址值,不必移動結點,所以在資料更改方面也具有較高的效率。
但是索引儲存結構在建立結點時會額外分配空間來建立一個索引表,因此降低了空間利用率。

4、雜湊儲存結構

雜湊(hash)儲存又稱為雜湊儲存,是一種力圖將資料元素的儲存位置與關鍵字之間建立確定對應關係的查詢技術。他的基本思想是通過一定的函式關係(雜湊函式,也稱為雜湊函式)計算出一個值,將這個值作為元素的儲存地址。
雜湊儲存的訪問速度是非常迅速的,只需要給出相應的結點的關鍵字,他會立即計算出該結點的儲存地址,因此它是一種非常重要的儲存方法。

結束語

資料儲存的幾種方式各有其特點,也各有其用途,不能說哪一種儲存結構就比另一種更好,在使用時,他們既可以單獨使用,也可以結合起來使用,具體要根據操作和實際情況來決定採取哪一種方式,或者哪幾種方式結合使用。

謝謝大家~~
下方是本人微訊號,有想要交流技術的小夥伴可以加微信聊騷哦~

image
image