2011-06-14 48 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開始的想法無關。

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