mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-07 21:24:18 +00:00
First version.
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
# Резюме
|
||||
|
||||
### Ключевые моменты
|
||||
|
||||
- Стек -- это структура данных, следующая принципу «первый вошел -- последний вышел», которая может быть реализована с помощью массива или связного списка.
|
||||
- С точки зрения временной эффективности, реализация стека на основе массива имеет более высокую среднюю эффективность, но во время расширения временная сложность одной операции вставки ухудшается до $O(n)$. В сравнении с этим, реализация стека на основе связного списка обеспечивает более стабильную эффективность.
|
||||
- С точки зрения пространственной эффективности, реализация стека на основе массива может привести к определенной степени потери пространства. Но следует отметить, что память, занимаемая узлами связного списка, больше, чем элементами массива.
|
||||
- Очередь -- это структура данных, следующая принципу «первый пришел -- первый вышел», которая также может быть реализована с помощью массива или связного списка. В сравнении временной и пространственной эффективности выводы для очереди аналогичны выводам для стека.
|
||||
- Двусторонняя очередь -- это очередь с большей степенью свободы, которая позволяет добавлять и удалять элементы с обоих концов.
|
||||
|
||||
### Вопросы и ответы
|
||||
|
||||
**В**: Реализованы ли функции перехода вперед и назад в браузере с помощью двусвязного списка?
|
||||
|
||||
Функции перехода вперед и назад в браузере по сути являются проявлением «стека». Когда пользователь посещает новую страницу, эта страница добавляется на вершину стека; когда пользователь нажимает кнопку «назад», эта страница извлекается с вершины стека. Использование двусторонней очереди позволяет удобно реализовать некоторые дополнительные операции, что упоминается в разделе «Двусторонняя очередь».
|
||||
|
||||
**В**: Нужно ли освобождать память узла после извлечения из стека?
|
||||
|
||||
Если извлеченный узел потребуется в дальнейшем, то освобождать память не нужно. Если он больше не понадобится, то в таких языках, как `Java` и `Python`, есть автоматическая сборка мусора, поэтому освобождать память вручную не требуется; в `C` и `C++` необходимо освобождать память вручную.
|
||||
|
||||
**В**: Двусторонняя очередь похожа на два стека, соединенных вместе. Каково ее назначение?
|
||||
|
||||
Двусторонняя очередь похожа на комбинацию стека и очереди или на два стека, соединенных вместе. Она представляет логику стека + очереди, поэтому может реализовать все применения стека и очереди, и при этом более гибка.
|
||||
|
||||
**В**: Как именно реализованы отмена (undo) и повтор (redo)?
|
||||
|
||||
Используются два стека: стек `A` для отмены и стек `B` для повтора.
|
||||
|
||||
1. Каждый раз, когда пользователь выполняет операцию, эта операция помещается в стек `A`, а стек `B` очищается.
|
||||
2. Когда пользователь выполняет «отмену», последняя операция извлекается из стека `A` и помещается в стек `B`.
|
||||
3. Когда пользователь выполняет «повтор», последняя операция извлекается из стека `B` и помещается в стек `A`.
|
||||
Reference in New Issue
Block a user