您的位置:首页 > 其它

普通树在线性内存中存储表示方法

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;							//有效节点个数
};
//////////////////////////////////////////////////////////////////////////




可以自己组合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: