資料結構樹的基本操作 資料結構 樹的基本操作

2021-10-17 06:29:23 字數 2237 閱讀 7086

#include#include#include"gtree.h"#include"linklist.h"typedefstruct _tag_gtreenode gtreenode; /*樹的節點*/

struct_tag_gtreenode

gtreedata* data; /*節點自身資料*/gtreenode* parent; /*父親節點*/linklist* child; /*孩子鍊錶*/};

typedefstruct _tag_tlnode tlnode; /*鍊錶節點結構體,將樹節點串成鍊錶*/

struct_tag_tlnode

linklistnode header;

gtreenode*node;

};static void recursive_display(gtreenode* node, gtree_printf* pfunc, int format, int gap, char div)/*遞迴列印函式 定義為static外界看不到 format--縮排單位個數 gap--縮排單位 div--縮排形式 pfunc--列印函式*/static void recursive_delete(linklist* list, gtreenode* node) /*遞迴刪除函式 要刪除該節點的所有函式*/if( index >= 0)

while( linklist_length(node->child) > 0 ) /*刪除要刪除的節點的孩子節點*/

}static int recursive_height(gtreenode* node) /*遞迴算出樹的高度 計算乙個樹的高度首先要算出子樹的高度後+1*/returnret;

}static int recursive_degree(gtreenode* node) /*定義靜態函式 外部無法看到 遞迴算出*/returnret;

gtree*gtree_create()

void gtree_destroy(gtree* tree) /*此處資料封裝 使用者表面看起來只是乙個tree(實際為乙個單鏈表)*/void gtree_clear(gtree*tree)

gtree_delete(tree,0); /*刪除根節點就相當於刪除整個樹*/}int gtree_insert(gtree* tree, gtreedata* data, int ppos) /*ppos---代表要插入的資料的父親在表中的位置*/

}elsereturnret;

gtreedata* gtree_delete(gtree* tree, intpos)

tlnode* trnode = (tlnode*)linklist_get(tree, pos);

gtreedata* ret = null; /*要刪除的節點裡儲存的資料*/

if( trnode !=null )

ret= trnode->node->data;

recursive_delete(tree, trnode->node); /*遞迴刪除,要刪除所有孩子*/}returnret;

gtreedata* gtree_get(gtree* tree, int pos) /*從組織鍊錶中pos節點的資料返回*/returnret;

gtreedata* gtree_root(gtree*tree)

int gtree_height(gtree*tree)

tlnode* trnode = (tlnode*)linklist_get(tree, 0);int ret = 0;if( trnode !=null )

ret= recursive_height(trnode->node);

}returnret;

}int gtree_count(gtree*tree)

int gtree_degree(gtree*tree)

tlnode* trnode = (tlnode*)linklist_get(tree, 0);int ret = -1;if( trnode !=null )

ret= recursive_degree(trnode->node);

}returnret;

}void gtree_display(gtree* tree, gtree_printf* pfunc, int gap, chardiv)

tlnode* trnode = (tlnode*)linklist_get(tree, 0);if( (trnode != null) && (pfunc !=null) )

recursive_display(trnode->node, pfunc, 0, gap, div);

單鏈表基本操作 資料結構

鍊錶是一種物理儲存結構上非連續 非順序的資料儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序來形成的。單鏈表分為兩種 帶頭節點和不帶頭結點。在這裡,主要介紹不帶頭結點的單鏈表的基本操作。標頭檔案 slist.h typedef int sdatatype typedef struct slis...

順序棧的基本操作 資料結構 一 棧結構

數 結 structure data 據 構 棧 結 構 s t a c k 前言 在計算機中儲存資料需要用到各種資料結構,一起來了解下棧結構吧。棧結構介紹 棧結構的宗旨就是先進後出 filo,first in last out 即先進入棧中的元素會在最後才能彈出。棧結構用圖形來表達的話就是這樣 棧...

資料結構樹基本操作

本章內容 樹的結構定義 遞迴的三種遍歷 非遞迴的三種遍歷 層次遍歷 求深度 求特定結點以及測試的主函式。include include define maxsize 50 二叉樹的鏈式儲存 typedef struct btnode btnode,tree 訪問改結點數值 void visit tr...