Дек — различия между версиями
Mutsch (обсуждение | вклад)  | 
				Mutsch (обсуждение | вклад)  м  | 
				||
| Строка 1: | Строка 1: | ||
== Определение ==  | == Определение ==  | ||
| + | [[Файл:deque1.png|thumb|right|200px|Дек]]  | ||
'''Дек''' (от англ. ''deque'' {{---}} double ended queue) {{---}} структура данных, представляющая из себя список элементов, в которой добавление новых элементов и удаление существующих производится с обоих концов. Дек можно воспринимать как двустороннюю очередь или двусторонний стек. Он имеет следующие операции:  | '''Дек''' (от англ. ''deque'' {{---}} double ended queue) {{---}} структура данных, представляющая из себя список элементов, в которой добавление новых элементов и удаление существующих производится с обоих концов. Дек можно воспринимать как двустороннюю очередь или двусторонний стек. Он имеет следующие операции:  | ||
* <tex> \mathtt{empty} </tex> {{---}} проверка на наличие элементов,  | * <tex> \mathtt{empty} </tex> {{---}} проверка на наличие элементов,  | ||
| Строка 5: | Строка 6: | ||
* <tex> \mathtt{popBack} </tex> (снятие с конца) {{---}} операция удаления конечного элемента,  | * <tex> \mathtt{popBack} </tex> (снятие с конца) {{---}} операция удаления конечного элемента,  | ||
* <tex> \mathtt{pushFront} </tex> (запись в начало) {{---}} операция вставки нового элемента в начало,  | * <tex> \mathtt{pushFront} </tex> (запись в начало) {{---}} операция вставки нового элемента в начало,  | ||
| − | * <tex> \mathtt{popFront} </tex> (снятие с начала) {{---}} операция   | + | * <tex> \mathtt{popFront} </tex> (снятие с начала) {{---}} операция удаления начального элемента.  | 
==Реализации==  | ==Реализации==  | ||
| Строка 16: | Строка 17: | ||
Дек состоит из элементов <tex>\mathtt {d[d.tail\dots d.head]}</tex>. Если очень много раз добавлять в начало и столько же раз удалять конечные элементы, то скоро мы дойдем до границы, имея немного элементов, при этом добавление в начало вызовет переполнение (в данной реализации во внимание не берется). Если в деке верно равенство <tex>\mathtt{d.tail = d.head}</tex>, то такой дек пуст и изъятие из него может привести к ошибке.  | Дек состоит из элементов <tex>\mathtt {d[d.tail\dots d.head]}</tex>. Если очень много раз добавлять в начало и столько же раз удалять конечные элементы, то скоро мы дойдем до границы, имея немного элементов, при этом добавление в начало вызовет переполнение (в данной реализации во внимание не берется). Если в деке верно равенство <tex>\mathtt{d.tail = d.head}</tex>, то такой дек пуст и изъятие из него может привести к ошибке.  | ||
| − | + | ||
| − | Все операции выполняются за <tex>  | + | |
| + | |||
| + | Все операции выполняются за <tex>O(1)</tex>.  | ||
=== На саморасширяющемся массиве ===  | === На саморасширяющемся массиве ===  | ||
---  | ---  | ||
Версия 17:41, 3 января 2016
Содержание
Определение
Дек (от англ. deque — double ended queue) — структура данных, представляющая из себя список элементов, в которой добавление новых элементов и удаление существующих производится с обоих концов. Дек можно воспринимать как двустороннюю очередь или двусторонний стек. Он имеет следующие операции:
- — проверка на наличие элементов,
 - (запись в конец) — операция вставки нового элемента в конец,
 - (снятие с конца) — операция удаления конечного элемента,
 - (запись в начало) — операция вставки нового элемента в начало,
 - (снятие с начала) — операция удаления начального элемента.
 
Реализации
Дек расходует только памяти, на хранение самих элементов.
На массиве
Ключевые поля:
- — массив, с помощью которого реализуется дек, способный вместить не более элементов,
 - — индекс головы дека,
 - — индекс хвоста дека.
 
Дек состоит из элементов . Если очень много раз добавлять в начало и столько же раз удалять конечные элементы, то скоро мы дойдем до границы, имея немного элементов, при этом добавление в начало вызовет переполнение (в данной реализации во внимание не берется). Если в деке верно равенство , то такой дек пуст и изъятие из него может привести к ошибке.
Все операции выполняются за .
На саморасширяющемся массиве
---
На списке
Ключевые поля:
-  
ListItem(data : T, next : ListItem, prev : ListItem)— конструктор, - — ссылка на хвост,
 - — ссылка на голову.
 
Дек очень просто реализуется на списке. Элементы всегда добавляются либо в , либо в .