Un deque înseamnă coadă dublă. Este un tip special de structură de date care vă permite să adăugați și să eliminați elemente de la ambele capete în mod eficient.
Spre deosebire de cozile normale (care urmează de obicei First In First Out) o deque acceptă atât operațiunile FIFO, cât și LIFO. Acest lucru îl face foarte flexibil și util în aplicațiile din lumea reală, cum ar fi programarea sarcinilor, problemele ferestrelor glisante și procesarea datelor în timp real.
Exemplu:
Pythonfrom collections import deque # Declaring deque de = deque(['name''age''DOB']) print(de)
Ieșire
deque(['name' 'age' 'DOB'])

De ce avem nevoie de deque
- Acceptă timpul O(1) pentru adăugarea/eliminarea elementelor de la ambele capete.
- Este mai eficient decât listele pentru operațiunile front-end.
- Poate funcționa atât ca coadă (FIFO) cât și ca stivă (LIFO).
- Ideal pentru programarea problemelor ferestrelor glisante și procesarea datelor în timp real.
- Oferă metode puternice încorporate, cum ar fi appendleft() popleft() şi roti().
Tipuri de intrare Deque restricționată
- Intrare restricționată Deque : Introducerea este limitată la un capăt, în timp ce ștergerea este permisă la ambele capete.
- Ieșire restricționată Deque : ieșirea este limitată la un capăt, dar inserarea este permisă la ambele capete.
Operațiuni pe deque
Iată un tabel care listează operațiunile încorporate ale unui deque în Python cu descrieri și complexitățile de timp corespunzătoare:
port de ascultare
| Operațiunea | Descriere | Complexitatea timpului |
|---|---|---|
| adaugă (x) | Adaugăxla capătul drept al dequei. | O(1) |
| appendleft(x) | Adaugăxla capătul stâng al dequei. | O(1) |
| pop() | Îndepărtează și returnează un element din capătul din dreapta al dequei. | O(1) |
| popleft() | Îndepărtează și returnează un element din capătul din stânga al decului. | O(1) |
| extinde (iterabil) | Adaugă toate elementele de laiterablela capătul drept al dequei. | bine) |
| extinde stânga (iterabil) | Adaugă toate elementele de laiterablela capătul din stânga deque (ordine inversă). | bine) |
| elimina (valoare) | Elimină prima apariție avaluedin deque. CreșteriValueErrordacă nu este găsit. | Pe) |
| roteste(n) | Rotește deque-ulnpași spre dreapta. Dacăneste negativ se rotește spre stânga. | bine) |
| clar() | Îndepărtează toate elementele din deque. | Pe) |
| număr (valoare) | Contorizează numărul de apariții alevalueîn deque. | Pe) |
| index(valoare) | Returnează indexul primei apariții a luivalueîn deque. CreșteriValueErrordacă nu este găsit. | Pe) |
| verso() | Inversează elementele dequei la locul lor. | Pe) |
Adăugarea și ștergerea elementelor din coadă
- anexează(x): Adaugă x la capătul din dreapta al decului.
- appendleft(x): Adaugă x la capătul din stânga deque.
- extinde (iterabil): Adaugă toate elementele de la iterabil la capătul drept.
- extinde stânga (iterabil): Adaugă toate elementele de la iterabil la capătul din stânga (în ordine inversă).
- elimina (valoare): Îndepărtează prima apariție a valorii specificate din deque. Dacă valoarea nu este găsită, se afișează o valoare ValueError.
- pop(): Îndepărtează și returnează un element din capătul din dreapta.
- popleft(): Îndepărtează și returnează un element din capătul din stânga.
- clar(): Îndepărtează toate elementele din 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)
Ieșire:
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([])
Accesarea articolului și lungimea dequei
- Indexare: Accesați elemente după poziție folosind indici pozitivi sau negativi.
- numai(): Returnează numărul de elemente din 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))
Ieșire
1 4 7
Rotația numărului și inversarea unui deque
- număr (valoare): Această metodă numără numărul de apariții ale unui anumit element din deque.
- rotiți(n): Această metodă rotește deque-ul cu n pași. N pozitiv se rotește la dreapta și negativul n se rotește la stânga.
- verso(): Această metodă inversează ordinea elementelor din deque.
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)
Ieșire
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])