mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-04 19:54:20 +00:00
deploy
This commit is contained in:
@@ -4457,8 +4457,8 @@
|
||||
|
||||
<!-- Page content -->
|
||||
<h1 id="51">5.1 Стек<a class="headerlink" href="#51" title="Permanent link">¶</a></h1>
|
||||
<p><u>Стек (stack)</u> - это линейная структура данных, подчиняющаяся логике "последним пришел - первым вышел".</p>
|
||||
<p>Стек можно сравнить со стопкой тарелок на столе. Если разрешено перемещать только одну тарелку за раз, то, чтобы достать тарелку снизу, сначала придется по одной убрать все тарелки сверху. Если заменить тарелки различными элементами, например целыми числами, символами, объектами и т.д., получится структура данных "стек".</p>
|
||||
<p><u>Стек (stack)</u> - это линейная структура данных, подчиняющаяся логике «последним пришел - первым вышел».</p>
|
||||
<p>Стек можно сравнить со стопкой тарелок на столе. Если разрешено перемещать только одну тарелку за раз, то, чтобы достать тарелку снизу, сначала придется по одной убрать все тарелки сверху. Если заменить тарелки различными элементами, например целыми числами, символами, объектами и т.д., получится структура данных «стек».</p>
|
||||
<p>Как показано на рисунке 5-1, верхнюю часть стопки элементов мы называем вершиной стека, а нижнюю - основанием стека. Операция добавления элемента на вершину называется <code>push</code>, а операция удаления верхнего элемента - <code>pop</code>.</p>
|
||||
<p><img alt="Правило LIFO для стека" class="animation-figure" src="../stack.assets/stack_operations.png" /></p>
|
||||
<p align="center"> Рисунок 5-1 Правило LIFO для стека </p>
|
||||
@@ -6216,10 +6216,10 @@
|
||||
<p><strong>Пространственная эффективность</strong></p>
|
||||
<p>При инициализации массива система выделяет начальную емкость, которая может превышать реальную потребность. Кроме того, механизм расширения обычно увеличивает емкость по некоторому коэффициенту, например в 2 раза, и расширенная емкость тоже может оказаться больше фактически необходимой. Поэтому <strong>реализация стека на основе массива может приводить к некоторым потерям памяти</strong>.</p>
|
||||
<p>Однако, поскольку узлы связного списка должны дополнительно хранить указатели, <strong>узлы списка сами по себе занимают больше пространства</strong>.</p>
|
||||
<p>В итоге нельзя просто сказать, какая из реализаций более экономна по памяти; это нужно анализировать в контексте конкретной задачи.</p>
|
||||
<p>В итоге нельзя просто сказать, какая из реализаций более экономна по памяти. Это нужно анализировать в контексте конкретной задачи.</p>
|
||||
<h2 id="514">5.1.4 Типичные применения стека<a class="headerlink" href="#514" title="Permanent link">¶</a></h2>
|
||||
<ul>
|
||||
<li><strong>Кнопки "назад" и "вперед" в браузере, undo и redo в программах</strong>. Каждый раз, когда мы открываем новую страницу, браузер помещает предыдущую страницу в стек, чтобы по операции "назад" можно было вернуться к ней. Операция "назад" по сути является <code>pop</code> . Если нужно одновременно поддерживать и "назад", и "вперед", то обычно используются два стека.</li>
|
||||
<li><strong>Кнопки «назад» и «вперед» в браузере, undo и redo в программах</strong>. Каждый раз, когда мы открываем новую страницу, браузер помещает предыдущую страницу в стек, чтобы по операции «назад» можно было вернуться к ней. Операция «назад» по сути является <code>pop</code> . Если нужно одновременно поддерживать и «назад», и «вперед», то обычно используются два стека.</li>
|
||||
<li><strong>Управление памятью программы</strong>. Каждый раз при вызове функции система помещает на вершину стека стековый кадр, в котором хранится контекст функции. В рекурсивной функции на этапе углубления рекурсии непрерывно выполняются операции <code>push</code> , а на этапе возврата - операции <code>pop</code> .</li>
|
||||
</ul>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user