1

これが私の最初の質問です。私は現在、情報セキュリティの修士号を取得しており、今学期はC++プログラミングを受講する必要がありました。つまり、これは宿題に関連しています。私は宿題に答えてくれるあなたを探していませんが、私は奇妙な状況に直面しています。二重にリンクされたリストで動作するプログラムを作成しましたが、すべて正常に動作します。ただし、ユーザーに値のリストを作成してもらうと、最初のノードは0を返し続けます。これについていくつかの読み取り値を見つけようとしましたが、それへの参照を見つけることができません。私の質問は、ヘッダーノード(最初のノード)は常にゼロになるのでしょうか?または私は何か間違ったことをしていますか?

case: 'C':
 cout<<"Please enter a list:"<<endl;
  while(n!=-999){
     myList.insert(n);
     cin>> n;}
  break;

私は今入力します:12321、1234、64564、346346。結果は0、12321、1234、64564、346346になります。これは何が起こるべきですか、それとも私は何か間違ったことをしていますか?また、これは私の最初の投稿なので、キーワードを色分けする方法を批判したり教えてください。

とにかくこれは宿題なので、私はガイダンスと建設的な批評だけを探しています。

よろしくお願いします

したがって、このフォーラムのコメントセクションを理解できないため、元の投稿を編集します。最初のセクションはコンストラクターコードです。

template <class Type>
 doublyLinkedList<Type>::doublyLinkedList()
  {
    first= NULL;
    last = NULL;
    count = 0;
      }

次に、私の挿入関数があります:

template <class Type>
void doublyLinkedList<Type>::insert(const Type& insertItem)
 {
nodeType<Type> *current;      //pointer to traverse the list
nodeType<Type> *trailCurrent; //pointer just before current
nodeType<Type> *newNode;      //pointer to create a node
bool found;

newNode = new nodeType<Type>; //create the node
newNode->info = insertItem;  //store the new item in the node
newNode->next = NULL;
newNode->back = NULL;

if(first == NULL) //if the list is empty, newNode is 
                  //the only node
{
   first = newNode;
   last = newNode;
   count++;
}
else
{
    found = false;
    current = first;

    while (current != NULL && !found) //search the list
        if (current->info >= insertItem)
            found = true;
        else
        {
            trailCurrent = current;
            current = current->next;
        }

    if (current == first) //insert newNode before first
    {
        first->back = newNode;
        newNode->next = first;
        first = newNode;
        count++;
    }
    else
    {
          //insert newNode between trailCurrent and current
        if (current != NULL)
        {
            trailCurrent->next = newNode;
            newNode->back = trailCurrent;
            newNode->next = current;
            current->back = newNode;
        }
        else
        {
            trailCurrent->next = newNode;
            newNode->back = trailCurrent;
            last = newNode;
        }

        count++;
      }//end else
   }//end else
}//end 

次に、初期化関数もあります。

template <class Type>
 void doublyLinkedList<Type>::initializeList()
 {
  destroy();
}

私は何かを逃しましたか?

4

2 に答える 2

5

最初に挿入してから、入力を読み取ります。

于 2012-09-29T21:19:02.153 に答える
1

あなたのコードの内容だけで、maniekは正しい答えを持っていると思いますので、同じものを見つけたら、この答えではなく、親切に彼に賛成してください。これは、Craigがループを並べ替えて、読み取り、テスト、必要に応じて中断する方法、または挿入する方法を理解するためのものです。

while (cin >> n && n != 999)
    myList.insert(n);

これをコーディングするには、forループ、do-whileループなど、約12の方法がありますが、それで実行できるはずです。繰り返しになりますが、問題が解決した場合は、賛成票を投じたmaniekの回答を検討し、緑色のチェックマークを付けてください(およびStackOverflowで、探している回答を提供するその他の回答)。

于 2012-09-29T21:36:35.473 に答える