資料結構 筆記:樹的儲存結構與實現
樹的結點的儲存結構
GTreeNode的設計與實現
template<typename T>
class GTreeNode : public TreeNode<T>
{
public:
LinkList<GTreeeNode<T>*> child;
};
GTree的設計與實現
template<typename T>
class GTree : public Tree<T>
{
// implementation
};
GTree(通用樹結構)的實現架構
每個樹節點中為什麼包含指向前驅的指標?
-因為從子節點從到父節點是線性的資料結構(連結串列)
相關推薦
資料結構 筆記:樹的定義與操作
樹是一種非線性的資料結構 樹是由n(n>=0)個結點組成的有限集合 -如果 n = 0,成為空樹; -如果n > 0,則: ·有一個特定的稱之為根(root)的結點 ·根據點只有直接後繼,但沒有直接前驅 ·除根以外的其他結點劃分為m(m>=0)個互補相交的有
資料結構 筆記:順序儲存結構的抽象實現
SeqList設計要點 -抽象類模板,儲存空間的位置和大小由子類完成 -實現順序儲存結構線性表的關鍵操作(增,刪,查,等) -提供陣列操作符,方便快速獲取元素 template <typename T> class SeqList : public List<T&g
資料結構 筆記:樹的儲存結構與實現
樹的結點的儲存結構 GTreeNode的設計與實現 template<typename T> class GTreeNode : public TreeNode<T> { public: LinkList<GTreeeNode<T>*&
資料結構 筆記:樹到二叉樹的轉換
通用樹結構的回顧 -雙親孩子表示法 ·每個結點都有一個指向其雙親的指標 ·每個結點都有若干個指向其孩子的指標 另一種屬性結構模型 -孩子兄弟表示法 ·每個節點都有一個指向其第一個孩子的指標 ·每個節點都有一個指向其第一個右兄弟的指標 孩子兄弟表示法的特點 -能夠表
資料結構 筆記:樹中屬性操作的實現
樹中結點的數目 -定義功能:count(node) ·在node為根結點的樹中統計結點的數目 int count(GTreeNode<T>* node) const { int ret = 0; if(node != NULL)
資料結構 筆記:樹中結點的刪除操作
刪除的方式 -基於資料元素值的刪除 ·SharedPointer<Tree<T>>remove(const T& value) -基於結點的刪除 ·SharedPointer<Tree<T>> remove(TreeNode&l
資料結構 筆記:樹節點中的清除操作
清除操作的定義 -void clear() ·將樹中的所有結點清除(釋放堆中的結點) 清除操作功能的定義 -free(node) ·清除node為根結點的樹 ·釋放樹中的每一個結點 樹中的結點可能來源於不用儲存空間,如何判斷堆空間的結點並釋放? -單憑記憶體地址很難準
資料結構 筆記:樹中結點的插入操作
插入的方式 -插入新結點 ·bool insert(TreeNode<T>* node) -插入資料元素 ·bool insert(const T& value,TreeNode<T>* parent) 如何指定新結點在樹裡面的位置 插入新結點
資料結構 筆記:樹中結點的查詢操作
查詢的方式 -基於資料元素值的查詢 ·GTreeNode<T>* find(const T& value) const -基於結點的查詢 ·GTreeNode<T>* find(TreeNode<T>* node) const 基於資料
資料結構 筆記:圖的定義與操作
定義 -圖是由頂點集合(Vertex)及頂點間的關係集合(Edge)組成的一種資料結構 -Graph = (V,E) -V= 是頂點的有窮非空集合 -E=是頂點之間關係的有窮集合 無向邊 -頂點x和y之間的邊沒有方向,則稱該邊為無向邊 -<x,y> 與<
資料結構 筆記:單鏈表的具體實現
LinkList設計要點 -類模板,通過頭結點訪問後繼結點 -定義內部結點型別Node,用於描述資料域和指標域 -實現線性表的關鍵操作(增,刪,查,等) template<typename T> class LinkList : public List<T>
資料結構 筆記:靜態單鏈表的實現
單鏈表的一個缺陷 -觸發條件 ·長時間使用單鏈表物件頻繁增加和刪除資料元素 -可能的結果 ·堆空間產生大量的記憶體碎片,導致系統執行緩慢 新的線性表 設計思路: 在單鏈表的內部增加一片預留的空間,所有Node物件都在這片空間中動態建立和動態銷燬。 靜態單鏈表的實
資料結構 筆記:迴圈連結串列的實現
什麼事迴圈連結串列? -概念上 ·任意資料元素都有一個前驅和一個後繼 ·所有的資料元素的關係構成一個邏輯上的環 -實現上 ·迴圈連結串列是一種特殊的單鏈表 ·尾結點的指標域儲存了首結點的地址 迴圈連結串列的實現思路 -通過模板定義CircleList類,繼承自L
資料結構 筆記:雙向連結串列的實現
單鏈表的另一個缺陷 -單向性 ·只能從頭結點開始高效訪問連結串列中的資料元素 -缺陷 ·如果需要逆向訪問單鏈表中的資料元素將極其低效 雙向的線性表 -在“單鏈表”的結點中增加一個指標pre,用於指向當前結點的前驅結點 雙向連結串列的繼承層次結構 Dua
資料結構 筆記:佇列的概念及實現(上)
佇列是一種特殊的線性表 佇列僅能線上性表的兩端進行操作 -隊頭(Front):取出資料元素的一端 -隊尾(Rear):插入資料元素的一端 佇列的特性 -先進先出 佇列的操作 -建立佇列 -銷燬佇列(Queue()) -清空佇列(~Queue()) -進佇列
資料結構 筆記:二叉樹的儲存結構設計
設計要點 -BTree為二叉樹結構,每個結點最多隻有兩個後繼結點 -BTreeNode只包含4個固定的共有成員(哪4個?) -實現樹結構的所有操作(增,刪,查,等) BTreeNode的設計與實現 template <typename T> class BTreeNo
資料結構 筆記:二叉樹中的結點刪除與清除
刪除的方式 -基於資料元素值的刪除 ·SharedPointer<Tree<T>>remove(const T& value) -基於結點的刪除 ·SharedPointer<Tree <T>>remove(TreeNode&l
資料結構 筆記:二叉樹的比較與相加
二叉樹的克隆操作 -SharedPointer<BTree<T>> clone() const ·克隆當前樹的一份拷貝 ·返回值為堆空間中的一棵新二叉樹(與當前樹相等) 二叉樹的克隆 -定義功能:clone(node) ·拷貝node為根節點的二叉樹(
資料結構 樹筆記-4 二叉樹儲存結構
既然上面提到了二叉樹的儲存結構,那麼我們進一步詳細介紹二叉樹的儲存結構 先複習一下 邏輯結構 與 物理結構: 邏輯結構講究的是資料之間的邏輯關係,分為:集合結構、線性結構、樹形結構、圖形結構 物理結構講究的是資料的儲存結構,分為:順序儲存結構、鏈式儲存結構
資料結構 筆記:線性表的順序儲存結構
順序儲存的定義 線性表的順序儲存結構,指的是用一段地址連續的儲存單元一次儲存線性表中的資料元素。 順序儲存結構的元素插入操作 -判斷目標位置是否合法 -將目標位置之後的所有元素後移一個位置 -將新元素插入目標位置 -線性長度加1 順序儲存結構的元素插入示例 bool