Een deque staat voor Double Ended Queue. Het is een speciaal type datastructuur waarmee u efficiënt elementen van beide kanten kunt toevoegen en verwijderen.
In tegenstelling tot normale wachtrijen (die meestal volgen op First In First Out) ondersteunt een deque zowel FIFO- als LIFO-bewerkingen. Dit maakt het zeer flexibel en nuttig in toepassingen in de echte wereld, zoals schuifvensterproblemen bij het plannen van taken en realtime gegevensverwerking.
Voorbeeld:
Pythonfrom collections import deque # Declaring deque de = deque(['name''age''DOB']) print(de)
Uitvoer
deque(['name' 'age' 'DOB'])

Waarom hebben we deque nodig
- Het ondersteunt O(1) tijd voor het toevoegen/verwijderen van elementen aan beide kanten.
- Het is efficiënter dan lijsten voor front-endbewerkingen.
- Het kan zowel als wachtrij (FIFO) als als stapel (LIFO) functioneren.
- Ideaal voor het plannen van schuifraamproblemen en realtime gegevensverwerking.
- Het biedt krachtige ingebouwde methoden zoals links toevoegen() popleft() En draaien().
Soorten beperkte Deque-invoer
- Invoer beperkte ontvr : Invoer is aan één kant beperkt, terwijl verwijdering aan beide kanten is toegestaan.
- Uitvoer beperkte ontvr : de uitvoer is aan één kant beperkt, maar invoegen is aan beide kanten toegestaan.
Operaties op deque
Hier is een tabel met ingebouwde bewerkingen van een deque in Python met beschrijvingen en de bijbehorende tijdcomplexiteit:
aanwijzingen in c
| Operatie | Beschrijving | Tijdcomplexiteit |
|---|---|---|
| toevoegen(x) | Voegt toexaan de rechterkant van de deque. | O(1) |
| links toevoegen(x) | Voegt toexaan de linkerkant van de deque. | O(1) |
| knal() | Verwijdert en retourneert een element aan de rechterkant van de deque. | O(1) |
| popleft() | Verwijdert en retourneert een element aan de linkerkant van de deque. | O(1) |
| uitbreiden (itereerbaar) | Voegt alle elementen toe vaniterableaan de rechterkant van de deque. | Akkoord) |
| extendleft(itereerbaar) | Voegt alle elementen toe vaniterablenaar het linkeruiteinde van de deque (omgekeerde volgorde). | Akkoord) |
| verwijder(waarde) | Verwijdert het eerste exemplaar vanvaluevan de deque. VerhoogtValueErrorindien niet gevonden. | Op) |
| roteren(n) | Roteert de dequenstappen naar rechts. Alsnis negatief, draait naar links. | Akkoord) |
| duidelijk() | Verwijdert alle elementen uit de deque. | Op) |
| aantal(waarde) | Telt het aantal voorkomens vanvaluein de deque. | Op) |
| index(waarde) | Retourneert de index van het eerste exemplaar vanvaluein de deque. VerhoogtValueErrorindien niet gevonden. | Op) |
| achteruit() | Keert de elementen van de deque op hun plaats om. | Op) |
Uit de wachtrij geplaatste items toevoegen en verwijderen
- toevoegen(x): Voegt x toe aan het rechteruiteinde van de deque.
- links toevoegen(x): Voegt x toe aan het linkeruiteinde van de deque.
- uitbreiden (itereerbaar): Voegt alle elementen toe, van de iterabele tot de rechterkant.
- extendleft(itereerbaar): Voegt alle elementen toe, van de iterabele tot de linkerkant (in omgekeerde volgorde).
- verwijder(waarde): Verwijdert de eerste keer dat de opgegeven waarde voorkomt uit de deque. Als er geen waarde wordt gevonden, wordt er een ValueError gegenereerd.
- knal(): Verwijdert en retourneert een element aan de rechterkant.
- poplinks(): Verwijdert en retourneert een element van het linkeruiteinde.
- duidelijk(): Verwijdert alle elementen uit de 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)
Uitgang:
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([])
Toegang tot item en lengte van deque
- Indexering: Krijg toegang tot elementen per positie met behulp van positieve of negatieve indexen.
- alleen(): Retourneert het aantal elementen in de 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))
Uitvoer
1 4 7
Tel rotatie en omkering van een deque
- aantal(waarde): Deze methode telt het aantal keren dat een specifiek element in de deque voorkomt.
- roteren(n): Deze methode roteert de deque met n stappen. Positieve n draait naar rechts en negatieve n draait naar links.
- achteruit(): Deze methode keert de volgorde van de elementen in de deque om.
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)
Uitvoer
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])