Una deque sta per Double-Ended Queue. È un tipo speciale di struttura dati che consente di aggiungere e rimuovere elementi da entrambe le estremità in modo efficiente.
A differenza delle code normali (che di solito seguono First In First Out) una deque supporta sia le operazioni FIFO che LIFO. Ciò lo rende molto flessibile e utile nelle applicazioni del mondo reale come la pianificazione delle attività, i problemi della finestra scorrevole e l'elaborazione dei dati in tempo reale.
Esempio:
Pythonfrom collections import deque # Declaring deque de = deque(['name''age''DOB']) print(de)
Produzione
deque(['name' 'age' 'DOB'])

- Supporta il tempo O(1) per aggiungere/rimuovere elementi da entrambe le estremità.
- È più efficiente degli elenchi per le operazioni front-end.
- Può funzionare sia come coda (FIFO) che come stack (LIFO).
- Ideale per la pianificazione dei problemi delle finestre scorrevoli e l'elaborazione dei dati in tempo reale.
- Offre potenti metodi integrati come E ruotare().
Tipi di input deque limitati
- : L'immissione è limitata a un'estremità mentre l'eliminazione è consentita a entrambe le estremità.
- : l'uscita è limitata ad un'estremità ma l'inserimento è consentito ad entrambe le estremità.
Ecco una tabella che elenca le operazioni integrate di una deque in Python con le descrizioni e le relative complessità temporali:
Shilpa Shetty
| Operazione | Descrizione | |
|---|---|---|
Aggiungexall'estremità destra della deque. | O(1) | |
| aggiungi a sinistra(x) | Aggiungexall'estremità sinistra della deque. | |
| pop() | Rimuove e restituisce un elemento dall'estremità destra della deque. | |
| popleft() | Rimuove e restituisce un elemento dall'estremità sinistra della deque. | |
Aggiunge tutti gli elementi daiterableall'estremità destra della deque. | Bene) | |
iterableall'estremità sinistra della deque (ordine invertito). | Bene) | |
Rimuove la prima occorrenza divaluefrom the deque. AlzaValueError | SU) | |
| ruotare(n) | nsteps to the right. Senè negativo ruota a sinistra. | Bene) |
| chiaro() | Rimuove tutti gli elementi dalla deque. | SU) |
| conteggio(valore) | Conta il numero di occorrenze divaluenella deque. | SU) |
Restituisce l'indice della prima occorrenza divaluenella deque. AlzaValueError | SU) | |
| inversione() | Inverte gli elementi della deque in atto. | SU) |
Aggiunta ed eliminazione di elementi di rimozione dalla coda
- aggiungere(x): Aggiunge x all'estremità destra della deque.
- Aggiunge x all'estremità sinistra della deque.
- estendere(iterabile): Aggiunge tutti gli elementi dall'iterabile all'estremità destra.
- extendleft(iterabile): Aggiunge tutti gli elementi dall'iterabile all'estremità sinistra (in ordine inverso).
- rimuovi(valore): Rimuove la prima occorrenza del valore specificato dalla deque. Se il valore non viene trovato, viene generato un ValueError.
- pop(): Rimuove e restituisce un elemento dall'estremità destra.
- popleft(): Rimuove e restituisce un elemento dall'estremità sinistra.
- chiaro(): Rimuove tutti gli elementi dalla 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)
Produzione:
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([])
Accesso all'elemento e lunghezza della deque
- Indicizzazione: Accedi agli elementi per posizione utilizzando indici positivi o negativi.
- soltanto(): Restituisce il numero di elementi nella 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))
Produzione
1 4 7
Conteggio Rotazione e Inversione di una deque
- conteggio(valore): Questo metodo conta il numero di occorrenze di un elemento specifico nella deque.
- ruotare(n): Questo metodo ruota la deque di n passi. La n positiva ruota a destra e la n negativa ruota a sinistra.
- inversione(): Questo metodo inverte l'ordine degli elementi nella 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)
Produzione
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])