Пополнение стека с помощью реализации узла - PullRequest
0 голосов
/ 02 ноября 2011

Мне трудно пополнить пачку после того, как я все это снял, чтобы распечатать. Я использую реализацию узла, поэтому я думаю, что этот факт меня смущает. Любые предложения будут оценены, спасибо.

Это мой оригинальный стек :: print () </p> <pre><code>// 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; }

Это мой стек с моей попыткой зацикливания и сохранения в temp. Он компилируется, но все еще не работает, как предполагается </p> <pre>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; }

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Если вы хотите распечатать содержимое стека, а затем отправить все значения обратно в том же порядке, я бы предложил перенести значения в другой стек после их печати. Затем, когда исходный стек пуст, поместите все значения из второго стека обратно в исходный стек.

0 голосов
/ 02 ноября 2011

Stack::print показывает текущий «магазин моментальных снимков» вашего стека, поэтому он не имеет никакого дела с изменением какой-либо из переменных-членов 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.
    } 
}
...