Deque reiškia dvipusę eilę. Tai specialus duomenų struktūros tipas, leidžiantis efektyviai pridėti ir pašalinti elementus iš abiejų galų.
Skirtingai nuo įprastų eilių (kurios paprastai seka „First In First Out“), deque palaiko ir FIFO, ir LIFO operacijas. Dėl to jis labai lankstus ir naudingas realiose programose, pvz., užduočių planavimo slankiojančiose langų problemose ir duomenų apdorojimas realiuoju laiku.
Pavyzdys:
Pythonfrom collections import deque # Declaring deque de = deque(['name''age''DOB']) print(de)
Išvestis
deque(['name' 'age' 'DOB'])

Kodėl mums reikia deque
- Jis palaiko O (1) laiką, kai pridedami / pašalinami elementai iš abiejų galų.
- Jis yra efektyvesnis nei priekinių operacijų sąrašai.
- Jis gali veikti ir kaip eilė (FIFO), ir kaip krūva (LIFO).
- Idealiai tinka slankiojančių langų problemų planavimui ir duomenų apdorojimui realiuoju laiku.
- Jis siūlo galingus integruotus metodus, pvz priedas kairėje () popleft () ir pasukti ().
Riboto deque įvesties tipai
- Įvesties apribotas deque : Viename gale įvestis ribojama, o abiejuose galuose leidžiama ištrinti.
- Išvesties apribojimas Deque : išvestis ribojama viename gale, bet leidžiama įterpti abiejuose galuose.
Deque operacijos
Čia yra lentelė, kurioje pateikiamos įtaisytosios „Python“ dekavimo operacijos su aprašymais ir jų atitinkamu laiko sudėtingumu:
centos vs redhat
| Operacija | Aprašymas | Laiko sudėtingumas |
|---|---|---|
| pridėti (x) | Pridedaxį dešinįjį deko galą. | O(1) |
| priedas kairėje (x) | Pridedaxkairiajame deko gale. | O(1) |
| pop () | Pašalina ir grąžina elementą iš dešiniojo deko galo. | O(1) |
| popleft () | Pašalina ir grąžina elementą iš kairiojo deko galo. | O(1) |
| išplėsti (kartojantis) | Prideda visus elementus išiterableį dešinįjį deko galą. | gerai) |
| išplėstinis kairysis (kartojantis) | Prideda visus elementus išiterablekairiajame dekės gale (atvirkščia tvarka). | gerai) |
| pašalinti (vertė) | Pašalina pirmąjį pasireiškimąvalueiš dekės. PakeliaValueErrorjei nerasta. | O(n) |
| pasukti (n) | Suka dequenžingsniai į dešinę. Jeigunyra neigiamas, sukasi į kairę. | gerai) |
| aišku () | Pašalina visus elementus iš deque. | O(n) |
| skaičius (vertė) | Skaičiuoja įvykių skaičiųvaluedekėje. | O(n) |
| indeksas (reikšmė) | Grąžina pirmojo įvykio indeksąvaluedekėje. PakeliaValueErrorjei nerasta. | O(n) |
| atvirkščiai () | Apverčia deque elementus į vietą. | O(n) |
Įtraukimo į eilę elementų pridėjimas ir ištrynimas
- pridėti (x): Prideda x prie dešiniojo deko galo.
- priedo kairėje (x): Prideda x prie kairiojo deque galo.
- išplėsti (kartojama): Prideda visus elementus nuo kartojimo iki dešiniojo galo.
- išplėstinis kairysis (kartojantis): Prideda visus elementus nuo kartojimo iki kairiojo galo (atvirkščia tvarka).
- pašalinti (vertė): Pašalina pirmą nurodytos reikšmės atvejį iš deque. Jei vertė nerandama, tai sukelia ValueError.
- pop(): Pašalina ir grąžina elementą iš dešiniojo galo.
- popleft (): Pašalina ir grąžina elementą iš kairiojo galo.
- aišku (): Pašalina visus elementus iš deque.
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)
Išvestis:
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([])
Prieiga prie elemento ir deko trukmė
- Indeksavimas: Pasiekite elementus pagal padėtį naudodami teigiamus arba neigiamus indeksus.
- tik (): Grąžina deque elementų skaičių.
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))
Išvestis
1 4 7
Skaičiavimo pasukimas ir dekės apvertimas
- skaičius (reikšmė): Šis metodas skaičiuoja konkretaus elemento pasikartojimų skaičių deque.
- pasukti (n): Šis metodas pasuka deque n žingsnių. Teigiamas n sukasi į dešinę, o neigiamas n sukasi į kairę.
- atvirkščiai (): Šis metodas pakeičia elementų eiliškumą.
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)
Išvestis
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])