Изменения

Перейти к: навигация, поиск

Персистентный стек

1004 байта добавлено, 16:20, 7 июня 2012
Нет описания правки
Тогда операции push и pop будут иметь следующий вид:<br>
* <tex>push(i, x, i)</tex> — добавляет элемент х к стеку с номером i, результирующий стек будет иметь номер n + 1.
* <tex>pop(i)</tex> — возвращает значение, хранящееся в элементе с номером i и копирует элемент, предыдущий для него.
 
результирующий стек будет иметь номер n + 1.
 
== Пример ==
Пусть изначально у нас есть один пустой стек. Для удобства, будем хранить Запишем его как «голову» с пометкой пустого стека:в массив.
<br>
[[Файл:B5bb212f3702e565498c4412e13242a7.jpg{| border = 1; cellspacing = 0; class="wikitable"|- align = "center"!index|1|-align = "center"!value|Картинка]]<brtex>null</tex>|-align = "center"!prev|<tex>null</tex>|} 
<br>
<br>
Далее выполним <tex>push(1, 53)</tex>. Создается новая вершина со значением 53, ссылающаяся на 1-ую, помещаем ее во 2ю ячейку массива:
<br>
[[Файл:612b6fe1562242b3a455b2abb698dfc9.jpg{|nothumb]]border = 1; cellspacing = 0; class="wikitable"|- align = "center"!index|1|&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;|-align = "center"!value|<tex>null</tex>|3|-align = "center"!prev|<tex>null<br/tex>|1|} 
<br>
Аналогично выполним <tex>push(2, 105)</tex> и <tex>push(1, 6)</tex>:<br><br>[[Файл:2beb71892fd79b675e095d5432827d03.jpg|nothumb]]
<br>
{| border = 1; cellspacing = 0; class="wikitable"
|- align = "center"
!index
|1
|&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;
|-align = "center"
!value
|<tex>null</tex>
|3
|5
|-align = "center"
!prev
|<tex>null</tex>
|1
|2
|}
Очевидно, что все 4 стека сейчас верно построены и легко восстанавливаются. Давайте теперь попробуем выполнить последовательно операции <texbr>pop(2)</texbr> и <tex>pop(3)</tex>:
<br>
* Выполним <tex>pop(23)</tex> . он возвращает 5 и копирует 1-ую вершину. Результирующий пятый стек — пустой.
<br>
[[Файл:3ab7456751529d76c5f1392d5d3b5fcb.jpg{|nothumb]]border = 1; cellspacing = 0; class="wikitable"|- align = "center"!index|1|&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;|-align = "center"!value|<tex>null</tex>|3|5|3|-align = "center"!prev|<tex>null</tex>|1|2|1|}
<br><br>
* Так будет выглядеть массив после последовательности операций <tex>push(3, 6), push(5, 1), pop(4), pop(35), push(7, 9):</tex> возвращает 10 и копирует  {| border = 1; cellspacing = 0; class="wikitable"|- align = "center"!index|1|&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;|-ую вершину: получаем шестой стек.align = "center"!value|<tex>null</tex>|3|5|3|6|1|<tex>null</tex>|5|9|-align = "center"!prev|<brtex>null<br/tex>[[Файл:Eced2ebbcee643d6c87576b0d3460785.jpg|nothumb]]1|2|1|3|5|<brtex>null</tex>|2|7|}
<br>
234
правки

Навигация