2011-06-14 56 views
0

我想生成以下一般树:开展通识教育树使用链表数据结构

   root 
       | 
     ---------------- 
     |    |  
    child   child  
         |      
        ----  
        |   
       child 
       | 
      ------------- 
      |  |  | 
     child child child 

我打算用两个班,一个存储父节点元素(Tree类)和其他实现用于存储儿童的链接列表(Single_linked_list)。

Tree类的我的类定义是:

template <class Object> 
class Tree 
{ 
    private: 
      Object node_val; // this is stored in node of tree 
      Single_linked_list< Tree<Object> * > children; 

    public: 
    // accessors and mutators 

    ... 
} 

我只是想确认Single_linked_list< Tree<Object> * > children;应该有它的*因为在C++中是指定的方式,它是将一个指针,把linked_list的开头指向所有的孩子?

请让我知道,如果我对该行代码的解释是正确的。

+0

这可能是好的。我可能会将类本身称为“节点”而不是“树”,因为每个对象实际上都是一个节点,而树是所有节点的集合。另外考虑存储'shared_ptr'的节点而不是原始的指针,因为当你实现任何类型的树操作时,你将为自己节省一个痛苦的世界。最后,单链表可以用C++ 0x作为''。 – 2011-06-14 19:59:41

回答

0

如果我理解你的问题,你想知道Single_linked_list类模板参数是什么意思。

你声明:

在C

++ [该*]是明确指出这是一个指针的方式,指向linked_list开始与所有的孩子

值得讨论。 Single_linked_list模板类管理作为模板参数给出的类型的实例。模板参数不会改变列表的使用方式。由模板参数标识的托管类型可以是内置的 - 就像指针一样 - 或者可以是一个类。无论模板参数是什么,我都会假设访问链表和遍历列表的函数将通过调用children的方法来访问,例如,

Single_linked_list<SomeClassOrType> my_list; 
putThingsOnList(&my_list); 

my_list.goToFirst(); 
while(!my_list.hasNext()) 
{ 
    SomeClassOrType &o = children.getCurrent(); 
    children.goToNext(); 
} 

您的发言上面引述的第一部分是正确的:在*指定指针类型。声明的第二部分是我不同意的地方:模板参数与linked_list开始的想法无关。

我希望你找到我的答案有价值。