Дек — различия между версиями
Mutsch (обсуждение | вклад) |
Mutsch (обсуждение | вклад) м |
||
Строка 1: | Строка 1: | ||
== Определение == | == Определение == | ||
− | '''Дек''' (от англ. ''deque'' {{---}} double ended queue | + | '''Дек''' (от англ. ''deque'' {{---}} double ended queue) {{---}} структура данных, представляющая из себя список элементов, в которой добавление новых элементов и удаление существующих производится с обоих концов. Дек можно воспринимать как двустороннюю очередь или двусторонний стек. Он имеет следующие операции: |
* <tex> \mathtt{empty} </tex> {{---}} проверка на наличие элементов, | * <tex> \mathtt{empty} </tex> {{---}} проверка на наличие элементов, | ||
* <tex> \mathtt{pushBack} </tex> (запись в конец) {{---}} операция вставки нового элемента в конец, | * <tex> \mathtt{pushBack} </tex> (запись в конец) {{---}} операция вставки нового элемента в конец, | ||
Строка 7: | Строка 7: | ||
* <tex> \mathtt{popFront} </tex> (снятие с начала) {{---}} операция вставки начального элемента. | * <tex> \mathtt{popFront} </tex> (снятие с начала) {{---}} операция вставки начального элемента. | ||
− | == | + | ==Реализации== |
− | Дек | + | Дек расходует только <tex>O(n)</tex> памяти, на хранение самих элементов. |
− | === | + | === На массиве === |
+ | Ключевые поля: | ||
+ | * <tex>\mathtt{d[1\dots n]} </tex> {{---}} массив, с помощью которого реализуется дек, способный вместить не более <tex>n</tex> элементов, | ||
+ | * <tex>\mathtt{d.head}</tex> {{---}} индекс головы дека, | ||
+ | * <tex>\mathtt{d.tail}</tex> {{---}} индекс хвоста дека. | ||
+ | |||
+ | Дек состоит из элементов <tex>\mathtt {s[d.tail\dots d.head]}</tex>. Если очень много раз добавлять в начало и столько же раз удалять конечные элементы, то скоро мы дойдем до границы, имея немного элементов, при этом добавление в начало вызовет переполнение. Поэтому имеет смысл брать индексы по модулю <tex> \mathtt{n} </tex> и следить, чтобы они были не меньше единицы. Если происходит изъятие и стека, в котором индексы равны |
Версия 19:55, 7 декабря 2015
Определение
Дек (от англ. deque — double ended queue) — структура данных, представляющая из себя список элементов, в которой добавление новых элементов и удаление существующих производится с обоих концов. Дек можно воспринимать как двустороннюю очередь или двусторонний стек. Он имеет следующие операции:
- — проверка на наличие элементов,
- (запись в конец) — операция вставки нового элемента в конец,
- (снятие с конца) — операция удаления конечного элемента,
- (запись в начало) — операция вставки нового элемента в начало,
- (снятие с начала) — операция вставки начального элемента.
Реализации
Дек расходует только
памяти, на хранение самих элементов.На массиве
Ключевые поля:
- — массив, с помощью которого реализуется дек, способный вместить не более элементов,
- — индекс головы дека,
- — индекс хвоста дека.
Дек состоит из элементов
. Если очень много раз добавлять в начало и столько же раз удалять конечные элементы, то скоро мы дойдем до границы, имея немного элементов, при этом добавление в начало вызовет переполнение. Поэтому имеет смысл брать индексы по модулю и следить, чтобы они были не меньше единицы. Если происходит изъятие и стека, в котором индексы равны