2014-02-13 60 views
0

我將表明,正在實施我的pop方法下面我堆的程序的一部分:pop方法沒有給予期望的輸出

for (int i=0; i<10; i++) // pop 10 times 
    s1.Pop(); 
cout << "*pop 10 times\ns1=" << s1 << endl; 
cout << "s1.Size()=" << s1.Size() << endl; 
cout << "s1.IsEmpty()=" << ((s1.IsEmpty()) ? "T" : "F") << endl; 
cout << "s1.IsFull()=" << ((s1.IsFull()) ? "T" : "F") << endl; 
cout << "s1.Peek()=" << s1.Peek() << endl; 
cout << endl; 

現在,我將表明,這個代碼部分使用

pop方法
T Pop() 
    { 
     Node* temp = top; 
     if(IsEmpty()) 
     { 
      return NULL; 
     } 
     top = temp->link; 
     return temp->data; 
     num_items--; 


    } 

我得到的輸出中幾乎是正確的,但有一些是關閉的,我將顯示輸出我得到如下:

enter image description here

我現在將顯示預期輸出:

enter image description here

爲了讓更多的清晰,我的名單的最大尺寸是30,由於某種原因,我的項數變量沒有被減少,我懷疑我需要一個循環來檢查東西減少,但我不知道我應該使用什麼。我試過if(top != NULL){} //placing the rest of the code from Node* temp = top; to num_items--; into brackets

回答

3
return temp->data; 
num_items--; 

num_items--;永遠不會被執行,因爲它涉及return語句之後。

1

T Pop()

return temp->data; 
num_items--; 

返回後的第二行不會被執行。