И у Пајтону
Декуе је скраћеница за Доубле-Ендед Куеуе. То је посебна врста структуре података која вам омогућава да ефикасно додајете и уклањате елементе са оба краја.
За разлику од нормалних редова (који обично прате први ушао, први изашао), декуе подржава и ФИФО и ЛИФО операције. Ово га чини веома флексибилним и корисним у апликацијама из стварног света, као што су проблеми са клизним прозором у распореду задатака и обрада података у реалном времену.
Пример:
Python from collections import deque # Declaring deque de = deque ([ 'name' 'age' 'DOB' ]) print ( de )
Излаз
deque(['name' 'age' 'DOB'])
Зашто нам треба декуе
- Подржава О(1) време за додавање/уклањање елемената са оба краја.
- Ефикаснији је од листа за фронт-енд операције.
- Може да функционише и као ред (ФИФО) и као стек (ЛИФО).
- Идеално за заказивање проблема са клизним прозором и обраду података у реалном времену.
- Нуди моћне уграђене методе као што су аппендлефт() поплефт() и ротирати().
Типови ограниченог декуе улаза
- Инпут Рестрицтед Декуе : Унос је ограничен на једном крају док је брисање дозвољено на оба краја.
- Оутпут Рестрицтед Декуе : излаз је ограничен на једном крају, али је уметање дозвољено на оба краја.
Операције на декуе
Ево табеле која наводи уграђене операције дека у Питхон-у са описима и њиховом одговарајућом временском сложеношћу:
| Операција | Опис | Временска сложеност |
|---|---|---|
| додај(к) | Додаје x до десног краја дека. | О(1) |
| аппендлефт(к) | Додаје x до левог краја дека. | О(1) |
| поп() | Уклања и враћа елемент са десног краја низа. | О(1) |
| поплефт() | Уклања и враћа елемент са левог краја низа. | О(1) |
| проширити (итерабле) | Додаје све елементе из iterable до десног краја дека. | у реду) |
| ектендлефт (итерабле) | Додаје све елементе из iterable до левог краја дека (обрнути редослед). | у реду) |
| уклони (вредност) | Уклања прво појављивање value из дека. Раисес ValueError ако се не нађе. | О(н) |
| ротирати (н) | Ротира декуе n кораци удесно. Ако n је негативан ротира улево. | у реду) |
| цлеар() | Уклања све елементе из дека. | О(н) |
| број (вредност) | Броји број појављивања value у деку. | О(н) |
| индекс (вредност) | Враћа индекс првог појављивања value у деку. Раисес ValueError ако се не нађе. | О(н) |
| реверсе() | Преокреће елементе дека на месту. | О(н) |
Додавање и брисање ставки из реда
- додај(к): Додаје к на десни крај низа.
- аппендлефт(к): Додаје к на леви крај низа.
- проширити (итерабле): Додаје све елементе из итерабле на десни крај.
- ектендлефт(итерабле): Додаје све елементе из итерабле на леви крај (обрнутим редоследом).
- уклони (вредност): Уклања прво појављивање наведене вредности из низа. Ако вредност није пронађена, покреће се ВалуеЕррор.
- поп(): Уклања и враћа елемент са десног краја.
- поплефт(): Уклања и враћа елемент са левог краја.
- цлеар(): Уклања све елементе из дека.
from collections import deque dq = deque ([ 10 20 30 ]) # Add elements to the right dq . append ( 40 ) # Add elements to the left dq . appendleft ( 5 ) # extend(iterable) dq . extend ([ 50 60 70 ]) print ( 'After extend([50 60 70]):' dq ) # extendleft(iterable) dq . extendleft ([ 0 5 ]) print ( 'After extendleft([0 5]):' dq ) # remove method dq . remove ( 20 ) print ( 'After remove(20):' dq ) # Remove elements from the right dq . pop () # Remove elements from the left dq . popleft () print ( 'After pop and popleft:' dq ) # clear() - Removes all elements from the deque dq . clear () # deque: [] print ( 'After clear():' dq )
Излаз:
After extend([50 60 70]): deque([5 10 20 30 40 50 60 70])
After extendleft([0 5]): deque([5 0 5 10 20 30 40 50 60 70])
After remove(20): deque([5 0 5 10 30 40 50 60 70])
After pop and popleft: deque([0 5 10 30 40 50 60])
After clear(): deque([])Приступ предмету и дужина дека
- Индексирање: Приступите елементима по позицији користећи позитивне или негативне индексе.
- само(): Враћа број елемената у низу.
import collections dq = collections . deque ([ 1 2 3 3 4 2 4 ]) # Accessing elements by index print ( dq [ 0 ]) print ( dq [ - 1 ]) # Finding the length of the deque print ( len ( dq ))
Излаз
1 4 7
Ротација бројања и преокрет дека
- цоунт(вредност): Овај метод броји број појављивања одређеног елемента у низу.
- ротирати(н): Овај метод ротира декуе за н корака. Позитивно н се ротира удесно, а негативно н се ротира улево.
- обрнуто (): Овај метод мења редослед елемената у низу.
from collections import deque # Create a deque dq = deque ([ 10 20 30 40 50 20 30 20 ]) # 1. Counting occurrences of a value print ( dq . count ( 20 )) # Occurrences of 20 print ( dq . count ( 30 )) # Occurrences of 30 # 2. Rotating the deque dq . rotate ( 2 ) # Rotate the deque 2 steps to the right print ( dq ) dq . rotate ( - 3 ) # Rotate the deque 3 steps to the left print ( dq ) # 3. Reversing the deque dq . reverse () # Reverse the deque print ( dq )
Излаз
3 2 deque([30 20 10 20 30 40 50 20]) deque([20 30 40 50 20 30 20 10]) deque([10 20 30 20 50 40 30 20])