普通树在线性内存中存储表示方法
2016-12-13 00:45
232 查看
想把树类型结构的非线性数据存储到计算机的线性存储,就发明了以下几种表示方法:
一.双亲表示法
总结:本次通过用数组实现,如下范例
优点:求父节点方便
二.孩子表示法
总结:本次通过用数组实现,如下范例
优点:求子节点(孩子节点)方便
-----第一种
-----第二种
三.双亲孩子表示法
总结:本次通过用数组实现,如下范例
----第一种
-----第二种
可以自己组合
一.双亲表示法
总结:本次通过用数组实现,如下范例
优点:求父节点方便
/************************************************************************/ /* 双亲表示法 */ /************************************************************************/ //实现是通过结构体的数组 //优点:求根节点方便 #define MAX_TREE_NODE 100 struct ParentTreeNode { void *data; //数据 // 无父节点为-1,其余位置号为数组的索引 int parentNum; //双亲位于数组中的索引号 }; struct ParentTree { ParentTreeNode treeNode[MAX_TREE_NODE]; //节点数组(所有节点集合) int nCount; //有效节点个数 }; //////////////////////////////////////////////////////////////////////////
二.孩子表示法
总结:本次通过用数组实现,如下范例
优点:求子节点(孩子节点)方便
-----第一种
////////////////////////////////////////////////////////////////////////// //实现是通过结构体的数组 //孩子表示法 //优点:求子节点方便 //数据重复 struct ChildTreeNode { void *data; //数据 //指向子节点的指针变量,无子节点为NULL,有则继续指向下一个新子节点 ChildTreeNode* pChildNext; }; struct ChildTree { ChildTreeNode treeNode[MAX_TREE_NODE]; //节点数组(所有节点集合) int nCount; //有效节点个数 }; //////////////////////////////////////////////////////////////////////////
-----第二种
#define MAX_TREE_NODE 100 //最大节点数, 即数组边界 #define MAX_TREE_DEGREE 3 //树的度 ////////////////////////////////////////////////////////////////////////// //实现是通过结构体的数组 //孩子表示法 //优点:求子节点方便 //数据重复 struct ChildTreeNode { void *data; //数据 int childIndex[MAX_TREE_DEGREE]; //该节点的子节点(孩子节点)在数组中的索引 //指向子节点的指针变量,无子节点为NULL,有则继续指向下一个新子节点 //ChildTreeNode* pChildNext; }; struct ChildTree { ChildTreeNode treeNode[MAX_TREE_NODE]; //节点数组(所有节点集合) int nCount; //有效节点个数 }; //////////////////////////////////////////////////////////////////////////
三.双亲孩子表示法
总结:本次通过用数组实现,如下范例
----第一种
#define MAX_TREE_NODE 100 //最大节点数, 即数组边界 #define MAX_TREE_DEGREE 3 //树的度 ////////////////////////////////////////////////////////////////////////// //实现是通过结构体的数组 //双亲孩子表示法 //优点:求父.子节点方便 struct ChildTreeNode { void *data; //数据 int parentIndex; //双亲位于数组中的索引号 int childIndex[MAX_TREE_DEGREE]; //该节点的子节点(孩子节点)在数组中的索引 }; struct ChildTree { ChildTreeNode treeNode[MAX_TREE_NODE]; //节点数组(所有节点集合) int nCount; //有效节点个数 }; //////////////////////////////////////////////////////////////////////////
-----第二种
#define MAX_TREE_NODE 100 //最大节点数, 即数组边界 #define MAX_TREE_DEGREE 3 //树的度 ////////////////////////////////////////////////////////////////////////// //实现是通过结构体的数组 //双亲孩子表示法 //优点:求父.子节点方便 struct ChildTreeNode { int childIndex; //子节点在数组中的索引号 ChildTreeNode *pNext; //指向下一个子节点指针 }; struct TreeNode { void *data; //数据 int parentIndex; //双亲位于数组中的索引号 ChildTreeNode* pChildNext; //指向子节点的指针变量,无子节点为NULL,有则继续指向下一个新子节点 }; struct ChildTree { TreeNode treeNode[MAX_TREE_NODE]; //节点数组(所有节点集合) int nCount; //有效节点个数 }; //////////////////////////////////////////////////////////////////////////
可以自己组合
相关文章推荐
- 各操作系统存储设备表示方法
- 在Linux系统中存储设备的两种表示方法
- 在Linux系统中存储设备的两种表示方法
- float数据在计算机内存中的存储方法
- 字符数据在内存中的存储形式及使用方法
- 关于存储过程中一个参数表示多个查询条件使用方法的简单处理
- 在Linux系统中存储设备的两种表示方法
- 在Linux系统中存储设备的两种表示方法
- DataTable和普通类型存储数据,内存和效率的差别
- 在Linux系统中存储设备的两种表示方法
- 在Linux系统中存储设备的两种表示方法
- 在Linux系统中存储设备的两种表示方法
- float数据在内存中的存储方法
- 在Linux系统中存储设备的两种表示方法
- 在Linux系统中存储设备的两种表示方法
- 文件系统管理 之 在Linux系统中存储设备的两种表示方法
- 普通变量 在内存中栈式存储的证明
- 在Linux系统中存储设备的两种表示方法
- 线性表的顺序存储(一)--数组表示
- 使用计算总内存大小的方法确定jvm中为对象分配的存储空间大小