資料結構 資料的儲存結構

2021-08-29 04:40:36 字數 2323 閱讀 9801

資料有有線性結構、樹形結構、圖狀結構和集合四種邏輯結構,那麼它們是如何儲存的呢?

資料結構的儲存結構有兩種,分別是順序儲存和鏈式儲存。順序儲存的特點是借助元素在儲存器中的相對位置來表示資料元素之間的邏輯關係;鏈式儲存的特點是借助指標表示資料元素質檢單邏輯關係。

1.線性結構:結構中的元素之間存在著一對一的線性關係。

如圖為乙個線性結構,那麼它的順序儲存和鏈式儲存如何呢?如下圖:

順序結構              鏈式結構

線性結構如陣列的存法,按一定順序存放;而鏈式結構如鍊表的存法,結點可以任意存放,如上圖,所以要用next相連,以保證每乙個結點都有唯一確定的前驅和後繼。

2.樹形結構:結構中的資料元素之間存在著一對一的線性關係。(這裡我們以二叉樹為例)

如圖是乙個簡單的二叉樹,其中6號結點不存在,其順序儲存如下圖:

因為是二叉樹,所以我們可以認為每個結點都有兩個「孩子」,不存在的可以用「空」來表示(上圖中的6號就是空),這樣就可以用一行表示乙個完整的二叉樹,並且知道每乙個結點所對應的前驅和後繼。

至此我們就可以發現:

2,3對應的前驅是1;

4,5對應的前驅是2;

6,7對應的前驅是3。

這樣我們就可以推導出幾個關係:

若結點為i,則i的前驅是i/2;i的左後繼是2i;i的右後繼是2i+1。

那麼二叉樹的鏈式結構又如何呢?

二叉樹的結點結構如下圖:

lchild域指向該結點的左孩子,data域記錄該結點的資料,rchild域指向該結點的右孩子。二叉樹的鏈式結構儲存如下圖所示:

我們可以讓頭指標指向a,則二叉鍊錶結點結構的描述如下:

typedef struct node

datatype date;

struct node *lchild;

struct node *rchild;

}bitnode, *bitree;

為了方便訪問某結點的雙親,還可以給鍊錶結點增加乙個雙親欄位parent,用來指向其雙親結點。每個結點由四個域組成,其結點結構為:

在實際應用中,要根據二叉樹的形態和具體要進行的操作來選擇決定採用哪種儲存結構。

3.圖狀結構:結構中的資料元素之間存在著多對多的任意關係。

以無向圖為例,如下圖所示:

則可得出關係為:

a:     (a,b) (a,c)

b:(b,a) (b,c)      (b,d)

c:(c,a) (c,b)      (c,d)

d:     (d,b) (d,c)

以陣列的儲存方式(鄰接矩陣)進行儲存可得:

其中「1」代表存在關係,「0」代表不存在關係。

將其轉化為鏈式的形式如下圖:

對其鏈式結構我們可採用指標陣列(鄰接表)的方式來連線單鏈表,其中的字母應換成相應的陣列下標,如下圖:

鄰接矩陣是不錯的一種圖儲存結構,但是,對於邊數相對頂點較少的圖,這種結構存在對儲存空間的極大浪費。因此,找到一種陣列與煉表相結合的儲存方法稱為鄰接表。圖中每個頂點的所有鄰接點構成乙個線性表,由於鄰接點的個數不定,所以,用單鏈表儲存,無向圖稱為頂點的邊表,有向圖則稱為頂點作為弧尾的出邊表。

資料結構 儲存結構

順序儲存 鏈式儲存 索引儲存 雜湊儲存 順序儲存是所有的節點存放在一塊連續的儲存區域中,用儲存節點的位置來體現結點之間的邏輯關係的儲存方法 優點 節省空間,隨機儲存資料 缺點 資料刪除和新增需要移動節點,而且不利於查詢 鏈式儲存結構是指資料元素存放在任意的儲存單元中,儲存單元是可以連續的,也可以是不...

(資料結構)儲存結構

一 線性表 1 順序儲存結構ok typedef structsqlist 順序表的型別定義 2 鏈式儲存結構ok typedef struct lnodelnode,linklist 二 棧 1 順序棧儲存結構 typedef structsqstack 2 鏈式儲存結構ok typedef st...

資料結構 邏輯結構 儲存結構

迴圈佇列是順序儲存的線性結構 資料結構 邏輯結構 線性 非線性 儲存結構 順序 鏈式 索引 雜湊 1 邏輯結構 資料元素間抽象化的相互關係 2 儲存結構 物理結構 在計算機儲存器中的儲存形式 邏輯結構的分類 1.按邏輯結構分為 線性結構 非線性結構 2.邏輯結構的四種基本形態 1 資料元素間沒有任何...