以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 计算机考研交流 』   (http://bbs.xml.org.cn/list.asp?boardid=67)
----  数据结构树的存储结构双亲孩子链怎么用C语言表示?急````  (http://bbs.xml.org.cn/dispbbs.asp?boardid=67&rootid=&id=61692)


--  作者:anni3989
--  发布时间:4/22/2008 9:12:00 PM

--  数据结构树的存储结构双亲孩子链怎么用C语言表示?急````
数据结构树的存储结构树双亲孩子链怎么用C语言表示?急````
--  作者:jason_00
--  发布时间:4/22/2008 10:05:00 PM

--  
typedef struct Node{
char data;
struct Node ** Child;//Pointer to Array which consists of child node
}*TNode;

--  作者:冬天的农夫
--  发布时间:4/23/2008 12:54:00 PM

--  
以下是引用jason_00在2008-4-22 22:05:00的发言:
typedef struct Node{
char data;
struct Node ** Child;//Pointer to Array which consists of child node
}*TNode;


我没有看明白楼主的意思。
不过如果按照jason的代码,需要在Node结构中加上一个int域,表明子节点个数。
例如:
typedef struct Node{
char data;
int n_child;
struct Node ** Child;//Pointer to Array which consists of child node
}*TNode;


--  作者:蝶影
--  发布时间:4/23/2008 3:20:00 PM

--  
...为什么用ARRAY,不用链表呢?用链表更好吧...
而且上面两位貌似忘记还得加一个域,表示父结点,因为说了是“双亲”孩子链.....
//设元素类型是ELEM,别忘记用的时候要define一下
typedef struct  //孩子链表的结点
{
   int child; //记录子结点下标  
   Child *next;
}Child
typedef struct
{
   int parent;  //记录父结点位置
   ELEM data; //记录元素
   Child *ChildList; //记录孩子链表的头指针
}ParentChildList
用的时候是ParentChildList Tree[Max_size];这样建一个数组...


--  作者:jason_00
--  发布时间:4/23/2008 5:39:00 PM

--  
树中每个结点的双亲唯一性,在存储结点信息的同时,为每个结点附设一个指向其双亲的指针parent,惟一地表示任何-棵树,所以可以用双亲链表表示法
定义如下:
#define MaxTreeSize 100 //向量空间的大小,由用户定义
typedef char DataType; //应由用户定义
typedef struct{
      DataType data;//结点数据
      int parent; //双亲指针,指示结点的双亲在向量中的位置
}PTreeNode;
typedef struct{
      PTreeNode nodes[MaxTreeSize];
      int n; //结点总数
}PTree;
PTree T; //T是双亲链表
所以所谓“LZ双亲孩子链表表示法”,有点多余,要么双亲链表,要么孩子链表
孩子链表定义如下:
//以下的DataType和MaxTreeSize由用户定义
    typedef struct CNode{//子链表结点
        int child; //孩子结点在向量中对应的序号
        struct CNode *next;
      }CNode;
    typedef struct{
        DataType data; //存放树中结点数据
        CNode *firstchild;//孩子链表的头指针
      }PTNode;
    typedef struct{
        PTNode nodes[MaxTreeSize];
        Int n,root; //n为结点总数,root指出根在向量中的位置
      }CTree;
    Ctree T; //T为孩子链表表示

--  作者:chosen0ne
--  发布时间:4/23/2008 6:59:00 PM

--  
什么叫做“树双亲孩子链”呢??
--  作者:蝶影
--  发布时间:4/23/2008 9:26:00 PM

--  
就是有双亲有孩子。在一个结点里,有父结点的信息,也有孩子链表的信息。

--  作者:蝶影
--  发布时间:4/23/2008 9:28:00 PM

--  
但是单用双亲或者单用孩子,要是访问孩子的操作和访问父结点的操作都比较多呢?这样两者结合就会比较好。
我觉得设计什么样的存储结构,取决于具体使用的规则。可以分开用,也可以合在一起用。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms