Стек на основе ссылок в C ++ - PullRequest
0 голосов
/ 19 марта 2019

Я пытался выяснить, как создать стек на основе ссылок, и наткнулся на фрагмент кода, который я не совсем понимаю.

int pop()
{
    // If the stack is empty return a sentinel value
    if (isEmpty())
        return -999;

    // Get the data to return from the top of the stack
    int intReturn = top->info;

    // Create a pointer to keep track of the top node
    IntSLLNode *temp;
    temp = top;

    // Move the top of the stack to the next element
    // or null if there is no next element
    top = top->next;

    // Free up memory
    delete temp;

    // Send back the data
    return intReturn;
    ...
}

Я понимаю до top=top->next.

1) Какой смысл создавать временный узел, если мы его никогда не используем?

2) Перемещая верхний указатель на следующий узел, удаляем ли мы прежний верхний узел?Таким образом, появляется это?

Спасибо

1 Ответ

1 голос
/ 19 марта 2019

1) temp необходимо, потому что нам понадобится старое значение top после перемещения top, чтобы освободить память подключенного узла. Мы должны переместить top, а затем освободить память; если мы попытаемся сделать это наоборот (освободить память, затем переместить top), то нам придется использовать временную переменную для хранения top->next (так как это было бы потеряно в этом сценарии). В любом случае вы не можете избежать временной переменной.

2) Перемещение top приводит к продвижению второго узла в верхний узел и удалению верхнего узла из стека (что составляет половину того, что мы ожидаем от pop - другая половина возвращает значение выскочил узел). Узел не удаляется до delete temp, поэтому нам нужно было его сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...