И у Пајтону

И у Пајтону

Декуе је скраћеница за Доубле-Ендед Куеуе. То је посебна врста структуре података која вам омогућава да ефикасно додајете и уклањате елементе са оба краја.

За разлику од нормалних редова (који обично прате први ушао, први изашао), декуе подржава и ФИФО и ЛИФО операције. Ово га чини веома флексибилним и корисним у апликацијама из стварног света, као што су проблеми са клизним прозором у распореду задатака и обрада података у реалном времену.

Пример:

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 ако се не нађе. О(н)
реверсе() Преокреће елементе дека на месту. О(н)

Додавање и брисање ставки из реда

  • додај(к): Додаје к на десни крај низа.
  • аппендлефт(к): Додаје к на леви крај низа.
  • проширити (итерабле): Додаје све елементе из итерабле на десни крај.
  • ектендлефт(итерабле): Додаје све елементе из итерабле на леви крај (обрнутим редоследом).
  • уклони (вредност): Уклања прво појављивање наведене вредности из низа. Ако вредност није пронађена, покреће се ВалуеЕррор.
  • поп(): Уклања и враћа елемент са десног краја.
  • поплефт(): Уклања и враћа елемент са левог краја.
  • цлеар(): Уклања све елементе из дека.
Python
   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([])

Приступ предмету и дужина дека

  • Индексирање: Приступите елементима по позицији користећи позитивне или негативне индексе.
  • само(): Враћа број елемената у низу.
Python
   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  

Ротација бројања и преокрет дека

  • цоунт(вредност): Овај метод броји број појављивања одређеног елемента у низу.
  • ротирати(н): Овај метод ротира декуе за н корака. Позитивно н се ротира удесно, а негативно н се ротира улево.
  • обрнуто (): Овај метод мења редослед елемената у низу.
Python
   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])