#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...