2010-04-26 113 views
0

堆棧使用int MaxSize = 3進行初始化。然後我將一個int推入列表中。 「推送:」返回到控制檯。程序在這裏崩潰。我認爲我的邏輯有缺陷,但不確定。也許是一個無限循環或未滿足的條件?謝謝你的幫助。鏈接列表push()

我想遍歷列表中full()方法的第二部分的最後一個節點。我以數組爲基礎實現了這個堆棧,所以必須實現此方法full(),因爲此方法位於主類中。

while(!stacker.full()) { 
    cout << "Enter number = "; 
    cin >> intIn; 
    stacker.push(intIn); 
    cout << "Pushed: " << intIn << endl; 
}//while 

調用LinkListStack.cpp到類LinkList full()。

int LinkList::full() { 
    if(head == NULL) { 
     top = 0; 
    } else { 
     LinkNode * tmp1; 
     LinkNode * tmp2; 
     tmp1 = head; 
     while(top != MaxSize) { 
      if(tmp1->next != NULL){ 
       tmp2 = tmp1->next; 
       tmp1 = tmp2; 
       ++top; 
      }//if 
     }//while 
    }//else 
return (top + 1 == MaxSize); 
} 

推法在這裏:

void LinkList::push(int numIn) { 
    LinkNode * nodeIn = new LinkNode(numIn); 
    if(head == NULL) { 
     head = nodeIn; 
    }else { 
     nodeIn = head; 
     head = nodeIn; 
    } 
} 
+0

爲什麼不在C++中使用Stack類? – zsong 2010-04-26 01:11:52

+0

'top'好像是LinkList的數據成員。但它的目的是什麼?您只需在其他分支中增加它,而不將它設置爲0.爲什麼不記得實際大小並避免遍歷列表?你應該做一個'full'作爲'const'成員函數。我不認爲'full'是真的應該改變你的名單。另外,'tmp2'沒用。你可以寫下'tmp1 = tmp1-> next'。 – sellibitze 2010-04-26 01:12:33

+0

你的「推」方法是怎樣的?它顯然是你的代碼的問題之一。 – 2010-04-26 01:20:16

回答

0

看看你的while循環中全():

while(top != MaxSize) { 
     if(tmp1->next != NULL){ 
      tmp2 = tmp1->next; 
      tmp1 = tmp2; 
      ++top; 
     }//if 
    }//while 

所以,如果你有列表中的一個元素,你進入while循環(假設爲top == 0?),並且由於它是列表tmp1->next中的第一個節點,因此它是NULL,它使頂端不會增加,因此您被困在循環中。您也可以使用tmp1 = tmp1 -> next;

爲了更正問題,請查看if語句,爲什麼您要檢查以確保下一個節點不爲null?

而且,看在推():

void LinkList::push(int numIn) { 
    LinkNode * nodeIn = new LinkNode(numIn); 
    if(head == NULL) { 
     head = nodeIn; 
    }else { 
     nodeIn = head; 
     head = nodeIn; 
    } 
} 

您應該設置nodeIn->nexthead,在nodeIn指着head之前。寫入新節點的方式永遠不會添加到列表中。

+0

我會重新檢查它。 – JDragon314159 2010-04-26 01:36:20

0
int LinkList::full() { 
     int top = 0; 
     LinkNode * tmp1; 
     tmp1 = head; 
     while(top <= MaxSize && tmp1 != NULL) { 
       tmp1 = tmp1->next; 
       ++top; 
     }//while 
    return (top <= MaxSize); 
} 
+0

堆棧將不會在MaxSize處終止。我可以繼續添加超過Maxsize參數的輸入? – JDragon314159 2010-04-26 02:01:40