樹是一種一對多的資料結構,這個一對多很好解釋,就比如乙隻狗媽媽,會有多隻小奶狗,這不就有一對多的意思嗎!
樹的根節點有且只有乙個,就比如小奶狗們只有乙個親狗媽。
那麼圖上的 b c d e 都是樹的根節點 a 的孩子; 總之,樹就是有很多結點構成,只不過這些結點在樹中會有不同的稱呼,來分析一下下圖
度----結點擁有的子樹數稱為結點的度, 度為 0 的結點稱為樹的葉結點;樹的度是樹內結點的度的最大值;此樹的度為 3 。
樹中結點之間的關係都是表達在字面上的,比如 b 是 a 的左孩子, c 是 a 的有孩子,a 是它們的雙親, 接下來的以此類推, 這關係還有堂兄弟關係、祖宗關係等。
樹的深度(高度)就是樹中結點的最大層次,比如上圖中根結點 a 為第一層, 根的孩子們為第二層,以此類推,此樹的深度為 5 。
有許多的集合在一起就可以形成森林。
儲存結構基本上就是順序儲存和鏈式儲存這兩種,然而對於樹這種一對多的結構,用這兩種儲存結構更便利,產生主要的三種儲存結構表示法:雙親表示法、孩子表示法、孩子兄弟表示法。1. 雙親表示法
其實雙親表示法內部主要還是以順序儲存為主先來看看該表示法的圖吧(**於《大話資料結構》)
特點:**2.孩子兄弟表示法#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()
定義:把每個結點的孩子結點排列起來,以單鏈表作為儲存結構,則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 的形式進行儲存,整個儲存形狀在邏輯結構上看,類似於實際生活中倒著的樹 圖...