Изменения

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

Дек

1209 байт добавлено, 02:44, 6 января 2016
Нет описания правки
=== На саморасширяющемся массиве ===
Ключевые поля:
* <tex>\mathtt{sd[1\dots n]}</tex> {{---}} массив, в котором хранится дек,
* <tex>\mathtt{newDeque[1\dots newSize]}</tex> {{---}} временный массив, где хранятся элементы после перекопирования,
* <tex>\mathtt{d.head}</tex> {{---}} индекс головы дека,
* <tex>\mathtt{head}</tex> {{---}} ссылка на голову.
Дек очень просто реализуется на двусвязном списке. Элементы всегда добавляются либо в <tex>\mathtt{tail.prev}</tex>, либо в <tex>\mathtt{head.next}</tex>. В данной реализации не учитывается пустой дек.
'''function''' pushBack(x : '''T'''):
=== На двух стеках ===
Ключевые поля:
* <tex>\mathtt{leftStack}</tex> {{---}} ссылка на хвост,
* <tex>\mathtt{rightStack}</tex> {{---}} ссылка на голову.
 
Храним два стека - <tex>\mathtt{leftStack}</tex> и <tex>\mathtt{rightStack}</tex>. Левый стек используем для операций <tex>\mathtt{popBack}</tex> и <tex>\mathtt{pushBack}/tex>, правый - для <tex>\mathtt{popFront}</tex> и <tex>\mathtt{pushFront}</tex>.
 
'''function''' pushBack(x : '''T'''):
leftStack.push(x)
 
'''T''' popBack():
'''if''' '''not''' leftStack.empty()
'''return''' leftStack.pop()
'''else'''
'''while''' '''not''' rightStack.empty()
leftStack.push(rightStack.pop())
'''return''' leftStack.pop()
 
'''function''' pushFront(x : '''T'''):
rightStack.push(x)
 
'''T''' popFront():
'''if''' '''not''' rightStack.empty()
'''return''' rightStack.pop()
'''else'''
'''while''' '''not''' leftStack.empty()
rightStack.push(leftStack.pop())
'''return''' rightStack.pop()
 
== См. также ==
* [[Стек]]
* [[Очередь]]
* [[Персистентный дек]]
 
==Источники информации==
39
правок

Навигация