2012-01-20 59 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();