資料結構之樹的儲存結構

2021-09-26 14:19:28 字數 2221 閱讀 2871

樹是一種一對多的資料結構,這個一對多很好解釋,就比如乙隻狗媽媽,會有多隻小奶狗,這不就有一對多的意思嗎!

樹的根節點有且只有乙個,就比如小奶狗們只有乙個親狗媽。

那麼圖上的 b c d e 都是樹的根節點 a 的孩子; 總之,樹就是有很多結點構成,只不過這些結點在樹中會有不同的稱呼,來分析一下下圖

度----結點擁有的子樹數稱為結點的度, 度為 0 的結點稱為樹的葉結點;樹的度是樹內結點的度的最大值;此樹的度為 3 。

樹中結點之間的關係都是表達在字面上的,比如 b 是 a 的左孩子, c 是 a 的有孩子,a 是它們的雙親, 接下來的以此類推, 這關係還有堂兄弟關係、祖宗關係等。

樹的深度(高度)就是樹中結點的最大層次,比如上圖中根結點 a 為第一層, 根的孩子們為第二層,以此類推,此樹的深度為 5 。

有許多的集合在一起就可以形成森林。

儲存結構基本上就是順序儲存和鏈式儲存這兩種,然而對於樹這種一對多的結構,用這兩種儲存結構更便利,產生主要的三種儲存結構表示法:雙親表示法、孩子表示法、孩子兄弟表示法。

1. 雙親表示法

其實雙親表示法內部主要還是以順序儲存為主

先來看看該表示法的圖吧(**於《大話資料結構》)

特點:

**

#include #define max_tree_size 100

typedef char elemtype;

typedef struct ptnode

ptnode;

typedef struct

ptree;

void creat_pnode(ptree *tree) }

void find_parent(ptree tree)

}if (flag == 0)

} int main()

2.孩子兄弟表示法

定義:把每個結點的孩子結點排列起來,以單鏈表作為儲存結構,則n個結點有n個孩子鍊錶,如果是葉子結點則此單鏈表為空。然後n個頭指標又組成乙個線性表,採用順序儲存結構,存放進乙個一維陣列中。

來個圖吧

3.孩子兄弟表示法

定義:任意一棵樹,它的結點的第乙個孩子如果存在就是唯一的,它的右兄弟存在也是唯一的。因此,設定兩個指標,分別指向該結點的第乙個孩子和此結點的右兄弟。

結構定義:

#define max_tree_size 100

typedef int elemetype;

typedef struct csnodecsnode, *cstree;

資料結構之儲存結構

儲存結構是資料 的邏輯結構 用計算機語言的實現,常見的 儲存結構 有 順序儲存 鏈式儲存 索引儲存 以及雜湊儲存 其中雜湊所形成的儲存結構叫 雜湊表 又叫雜湊表 因此雜湊表也是一種儲存結構。棧只是一種抽象資料型別,是一種邏輯結構,棧邏輯結構對應的順序儲存結構為順序棧,對應的鏈式儲存結構為鏈棧 迴圈佇...

《資料結構》樹的儲存結構2019 10 15

定義 1 只有乙個根結點 2 其餘結點為幾個不相交的有限集,他們本身也是一棵樹,且被稱為根的子樹。樹的定義就用到了遞迴的方法。幾個概念 結點的度 該結點擁有的子樹的數量 葉結點 度為0的結點 樹的度 結點度的最大值 層次 根結點為第一層,其孩子為第二層,以此類推。深度 結點的最大層數 高度 數量和深...

資料結構中的樹儲存結構

圖1 樹的示例 圖 1 a 是使用樹結構儲存的集合 的示意圖。對於資料 a 來說,和資料 b c d 有關係 對於資料 b 來說,和 e f 有關係。這就是 一對多 的關係。將具有 一對多 關係的集合中的資料元素按照圖 1 a 的形式進行儲存,整個儲存形狀在邏輯結構上看,類似於實際生活中倒著的樹 圖...