使用Linked List数据结构实现General Tree

时间:2011-06-14 19:55:50

标签: c++ class templates pointers tree

我正在尝试生成以下常规树:

             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的开头所有这些孩子?

如果我对该行代码的解释是正确的,请告诉我。

1 个答案:

答案 0 :(得分: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的开始概念无关。

我希望你觉得我的答案很有价值。