2011-11-02 62 views
0

爲了將其打印出來,我已經很難重新填充堆棧了。我正在使用節點實現,所以我認爲這是令我困惑的事實。任何建議,將不勝感激,謝謝。使用節點實現的重新填充堆棧

這是我原來的堆棧::打印()

// Function to print Gumball info field (color and counter) 
void Stack::print() 
{ 
    Node *p; 
    Type x; 

    while(top != NULL) { 
     p = top; 
     x = p -> getinfo(); 
     cout << " " << x.color << " " << " " << x.counter << endl << endl; 
     top = p -> getnext(); 
    } 

    return; 
} 

This is my stack with my attempt to loop and store in temp. It compiles but still is not working as suppose to

void Stack::print() { Node *p,*q; Type x,x_temp; while(top != NULL) { p = top; x = p -> getinfo(); cout << " " << x.color << " " << " " << x.counter << endl << endl; x_temp = x; q = top; top = p -> getnext(); } while(top != NULL) { q -> setinfo(x_temp); q -> setnext(top); top = q; } return; } 

+0

'top'是一個成員變量嗎?如果是這樣,你爲什麼要在'print'中修改它? 'print'應該保持你的棧不變。 –

+0

我試圖只修改它來打印堆棧,然後將所有東西都還原回原來的....基本上從頂部獲取信息,打印它然後移動到下一個口香糖。之後,我想將所有的東西從臨時堆棧移回原來的順序。 – 123me

回答

0

Stack::print顯示當前的堆棧「snapshop」,所以它沒有業務修改任何Stack的成員變量。沒有必要對堆棧進行「備份」並將其還原。你只需要以不妨礙堆棧的方式走下堆棧。

而不是使top成員變量走下堆棧,初始化本地Node指針將與top相同,並使本地指針走下堆棧。

換句話說,top在您的print成員函數中應該是隻讀的(不可變的)。爲了強制成員函數不能修改任何成員變量,可以通過在成員函數聲明末尾添加const關鍵字來使成員函數不可變。

例子:

// Const member function enforces that the Stack remain unmodified 
void Stack::print() const 
{ 
    Node *p = top; // Make p initially point to the top of the stack 
    Type x; 

    while(p != NULL) { 
     x = p -> getinfo(); 
     cout << " " << x.color << " " << " " << x.counter << endl << endl; 
     p = p->getNext(); // Make p walk down the stack to the next Node. 
    } 
} 
+0

噢,我明白了。我總是也能夠弄清楚如何將原始物品存儲在臨時堆棧中......然後清空臨時堆棧,以便將它們放回原始堆棧。謝謝。 – 123me

1

如果您想打印一個棧的內容,然後按所有值回以同樣的順序,我建議推值設置到一個打印後不同的堆疊。然後,一旦原始堆棧爲空,將第二個堆棧中的所有值彈回原始堆棧。

+0

我編輯我的問題......我發現我的企圖,以節省一個臨時堆,推動所有元素從臨時回原來的堆棧,請參閱我原來的問題。 – 123me