2012-01-20 93 views
1

我想創建一個簡單的單向鏈接列表。我在概念上理解它,但是我試圖創建一個。我知道那裏有導遊,但我通過反覆試驗瞭解了更多的東西。瞭解/創建鏈接列表

我簡單Contact類:

class Contact 
{ 
    std::string name, phNum; 

    Contact* next; 

    public: 
    void getInfo(); 
    void printInfo(); 
}; 

在這一點上,所有我試圖做的是創建一些聯繫人(即各種各樣的地址簿)的列表,然後打印出他們的信息。

根據我的理解,該列表應包含Contact類型的幾個唯一對象。

我的問題是,我如何在具有唯一地址的堆中創建多個對象?我嘗試了下面的內容,但它顯然不起作用,因爲所有的指針都是相同的。

while(true) 
{ 
    Contact* newEntry= new Contact; 
    newEntry->getInfo(); 
    // rest of the linking stuff 
} 
+3

「但它顯然不起作用,因爲所有的指針都是相同的」你爲什麼會這麼想? 'new'不會返回與其他任何仍然有效的指針相同的指針。 – bames53

+0

@ bames53它可以返回相同的指針,指向不同的內存。也許這就是拋棄他的原因。當你輸入循環的不同迭代時,任何舊指針都會超出範圍。 –

+3

我不認爲「試錯」或「遵循指南」是一種善於編程的好方法。相反,您應該瞭解驅動鏈表的抽象算法,並理解語言結構如何工作,然後根據您對這兩種語言的理解,在語言中實現該算法。 –

回答

3

要初始化一個循環多次接觸,你可能想要做這樣的事情:

Contact *FirstOne = new Contact(); 
Contact *current = FirstOne; 
while(...) 
{ 
    current->next = new Contact(); 
    current = current->next; 
    //do stuff to current, like adding info 
} 

你建立你的聯繫人列表的方式。之後*FirstOne是第一個,*current是你列表中的最後一個元素。你也可能想要確保構造函數在NULL旁邊設置*來檢測列表的結尾。

1

好吧,只需創建一個新的聯繫人並將其鏈接到上一個。它在概念上看起來像這樣。

object 
    | 
    Pointer to next one -> object 
          | 
          Pointer to next one -> object 


Contact* newEntry= new Contact();  
newEntry->getInfo();  
newEntry->next = new Contact(); 
newEntry->next->getInfo(); 
newEntry->next->next = new Contact();