2012-01-20 6 views
1

私は簡単な一方向リンクリストを作成しようとしています。私はそれを概念的に理解していますが、私は作成しようとしています。私はそこにガイドがあることを知っているが、私は試行錯誤して物事をよく理解する。リンクリストの理解/作成

私の簡単なContactクラス:この時点で

class Contact 
{ 
    std::string name, phNum; 

    Contact* next; 

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

、私がやろうとしていますすべては、いくつかの連絡先(種類のすなわち、アドレス帳)とのリストを作成し、その情報をプリントアウトすることです。

私の理解によると、このリストには、タイプContactのいくつかの一意のオブジェクトが含まれている必要があります。

私の質問は、一意のアドレスを持つヒープ内に複数のオブジェクトを作成するにはどうすればいいですか?私は以下を試しましたが、明らかにすべてのポインタが同じになるため、動作しませんでした。あなたの連絡先リストを構築している

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

その方法:あなたはこのような何かをしたい場合、ループ内の多くの接点を初期化するために

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

"しかし、明らかにすべてのポインタが同じであるため、機能しませんでした。なぜあなたはそれを考えますか? 'new'は他のまだ有効なポインタと同じポインタを返さないでしょう。 – bames53

+0

@ bames53同じポインタを返して、別のメモリを指すことができます。多分それが彼を捨てているのかもしれない。ループの別の繰り返しを入力すると、古いポインタは範囲外になります。 –

+3

"試行錯誤"や "ガイドに従う"のいずれかがプログラミングをうまくするには良い方法ではないと思います。むしろ、リンクされたリストを駆動する抽象アルゴリズムを理解し、その言語構造の仕組みを理解し、その2つの*理解*に基づいて言語でアルゴリズムを実装する必要があります。 –

答えて

3

。その後、*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(); 
関連する問題