4.9 KiB
Резюме
Ключевые моменты
- Стек -- это структура данных, следующая принципу «первый вошел -- последний вышел», которая может быть реализована с помощью массива или связного списка.
- С точки зрения временной эффективности, реализация стека на основе массива имеет более высокую среднюю эффективность, но во время расширения временная сложность одной операции вставки ухудшается до
O(n). В сравнении с этим, реализация стека на основе связного списка обеспечивает более стабильную эффективность. - С точки зрения пространственной эффективности, реализация стека на основе массива может привести к определенной степени потери пространства. Но следует отметить, что память, занимаемая узлами связного списка, больше, чем элементами массива.
- Очередь -- это структура данных, следующая принципу «первый пришел -- первый вышел», которая также может быть реализована с помощью массива или связного списка. В сравнении временной и пространственной эффективности выводы для очереди аналогичны выводам для стека.
- Двусторонняя очередь -- это очередь с большей степенью свободы, которая позволяет добавлять и удалять элементы с обоих концов.
Вопросы и ответы
В: Реализованы ли функции перехода вперед и назад в браузере с помощью двусвязного списка?
Функции перехода вперед и назад в браузере по сути являются проявлением «стека». Когда пользователь посещает новую страницу, эта страница добавляется на вершину стека; когда пользователь нажимает кнопку «назад», эта страница извлекается с вершины стека. Использование двусторонней очереди позволяет удобно реализовать некоторые дополнительные операции, что упоминается в разделе «Двусторонняя очередь».
В: Нужно ли освобождать память узла после извлечения из стека?
Если извлеченный узел потребуется в дальнейшем, то освобождать память не нужно. Если он больше не понадобится, то в таких языках, как Java и Python, есть автоматическая сборка мусора, поэтому освобождать память вручную не требуется; в C и C++ необходимо освобождать память вручную.
В: Двусторонняя очередь похожа на два стека, соединенных вместе. Каково ее назначение?
Двусторонняя очередь похожа на комбинацию стека и очереди или на два стека, соединенных вместе. Она представляет логику стека + очереди, поэтому может реализовать все применения стека и очереди, и при этом более гибка.
В: Как именно реализованы отмена (undo) и повтор (redo)?
Используются два стека: стек A для отмены и стек B для повтора.
- Каждый раз, когда пользователь выполняет операцию, эта операция помещается в стек
A, а стекBочищается. - Когда пользователь выполняет «отмену», последняя операция извлекается из стека
Aи помещается в стекB. - Когда пользователь выполняет «повтор», последняя операция извлекается из стека
Bи помещается в стекA.