Un Python valodā

Un Python valodā

Deque apzīmē Double-Ended Queue. Tas ir īpašs datu struktūras veids, kas ļauj efektīvi pievienot un noņemt elementus no abiem galiem.

Atšķirībā no parastajām rindām (kas parasti seko First In First Out) deque atbalsta gan FIFO, gan LIFO darbības. Tas padara to ļoti elastīgu un noderīgu reālās pasaules lietojumprogrammās, piemēram, uzdevumu plānošanas bīdāmo logu problēmas un reāllaika datu apstrādi.

Piemērs:

Python
   from   collections   import   deque   # Declaring deque    de   =   deque  ([  'name'    'age'    'DOB'  ])   print  (  de  )   

Izvade
deque(['name' 'age' 'DOB'])  
Tāpēc

Kāpēc mums vajag deque

  • Tas atbalsta O(1) laiku elementu pievienošanai/noņemšanai no abiem galiem.
  • Tas ir efektīvāks nekā priekšgala operāciju saraksti.
  • Tas var darboties gan kā rinda (FIFO), gan kā kaudze (LIFO).
  • Ideāli piemērots bīdāmo logu problēmu plānošanai un reāllaika datu apstrādei.
  • Tā piedāvā jaudīgas iebūvētas metodes, piemēram appendleft() popleft() un pagriezt ().

Ierobežotās deque ievades veidi

  • Ievades ierobežota deque : Ievade ir ierobežota vienā galā, savukārt dzēšana ir atļauta abos galos.
  • Output Restricted Deque : izvade ir ierobežota vienā galā, bet ievietošana ir atļauta abos galos.

Operācijas uz deque 

Šeit ir tabula, kurā uzskaitītas Python iebūvētās deque operācijas ar aprakstiem un to atbilstošo laika sarežģītību:

Darbība Apraksts Laika sarežģītība
pievienot (x) Pievieno x dekas labajā galā. O(1)
pielikums pa kreisi (x) Pievieno x uz dekas kreiso galu. O(1)
pop() Noņem un atgriež elementu no deque labā gala. O(1)
popleft() Noņem un atgriež elementu no deque kreisā gala. O(1)
paplašināt (atkārtojams) Pievieno visus elementus no iterable dekas labajā galā. labi)
pagarināts pa kreisi (atkārtojams) Pievieno visus elementus no iterable dekas kreisajā galā (apgrieztā secībā). labi)
noņemt(vērtība) Noņem pirmo gadījumu value no dekas. Paaugstina ValueError ja nav atrasts. O(n)
pagriezt (n) Pagriež deque n soļi pa labi. Ja n ir negatīvs, griežas pa kreisi. labi)
skaidrs () Noņem visus elementus no deque. O(n)
skaits (vērtība) Uzskaita gadījumu skaitu value dekā. O(n)
indekss(vērtība) Atgriež indeksu, kas pirmo reizi parādās value dekā. Paaugstina ValueError ja nav atrasts. O(n)
reverse() Apgriež dekas elementus vietā. O(n)

Rindas vienumu pievienošana un dzēšana

  • pievienot (x): Dekas labajā galā pievieno x.
  • pielikums pa kreisi (x): Dekas kreisajā galā pievieno x.
  • paplašināt (atkārtot): Pievieno visus elementus no iterējamā līdz labajam galam.
  • pagarināts pa kreisi (atkārtojams): Pievieno visus elementus no iterējamā līdz kreisajam galam (apgrieztā secībā).
  • noņemt(vērtība): Noņem norādītās vērtības pirmo reizi no deque. Ja vērtība netiek atrasta, tas rada ValueError.
  • pop(): Noņem un atgriež elementu no labā gala.
  • popleft(): Noņem un atgriež elementu no kreisā gala.
  • skaidrs (): Noņem visus elementus no deque.
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  )   

Izvade:

 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([])

Piekļuve vienumam un deque garums

  • Indeksēšana: Piekļūstiet elementiem pēc pozīcijas, izmantojot pozitīvus vai negatīvus indeksus.
  • tikai (): Atgriež elementu skaitu dekvē.
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  ))   

Izvade
1 4 7  

Skaita rotācija un dekas apgriešana

  • skaits (vērtība): Šī metode uzskaita konkrēta elementa parādību skaitu dekvē.
  • pagriezt (n): Šī metode pagriež deque par n soļiem. Pozitīvais n griežas pa labi un negatīvais n griežas pa kreisi.
  • reverse(): Šī metode maina elementu secību dekvē.
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  )   

Izvade
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])