Дек — различия между версиями
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) — структура данных, представляющая из себя список элементов, в которой добавление новых элементов и удаление существующих производится с обоих концов. Дек можно воспринимать как двустороннюю очередь или двусторонний стек. Он имеет следующие операции:
- — проверка на наличие элементов,
 - (запись в конец) — операция вставки нового элемента в конец,
 - (снятие с конца) — операция удаления конечного элемента,
 - (запись в начало) — операция вставки нового элемента в начало,
 - (снятие с начала) — операция вставки начального элемента.
 
Реализации
Дек расходует только памяти, на хранение самих элементов.
На массиве
Ключевые поля:
- — массив, с помощью которого реализуется дек, способный вместить не более элементов,
 - — индекс головы дека,
 - — индекс хвоста дека.
 
Дек состоит из элементов . Если очень много раз добавлять в начало и столько же раз удалять конечные элементы, то скоро мы дойдем до границы, имея немного элементов, при этом добавление в начало вызовет переполнение. Поэтому имеет смысл брать индексы по модулю и следить, чтобы они были не меньше единицы. Если происходит изъятие и стека, в котором индексы равны