Og i Python
En deque står for Double-Ended Queue. Det er en speciel type datastruktur, der giver dig mulighed for at tilføje og fjerne elementer fra begge ender effektivt.
I modsætning til normale køer (som normalt følger First In First Out) understøtter en deque både FIFO- og LIFO-operationer. Dette gør det meget fleksibelt og nyttigt i applikationer fra den virkelige verden som opgaveplanlægningsproblemer med glidende vinduer og databehandling i realtid.
Eksempel:
Python from collections import deque # Declaring deque de = deque ([ 'name' 'age' 'DOB' ]) print ( de )
Produktion
deque(['name' 'age' 'DOB'])
Hvorfor har vi brug for deque
- Det understøtter O(1) tid til at tilføje/fjerne elementer fra begge ender.
- Det er mere effektivt end lister til front-end-operationer.
- Den kan både fungere som en kø (FIFO) og en stak (LIFO).
- Ideel til at planlægge problemer med glidende vinduer og databehandling i realtid.
- Det tilbyder kraftfulde indbyggede metoder som f.eks appendleft() popleft() og rotere().
Typer af begrænset deque-input
- Input Begrænset Deque : Input er begrænset i den ene ende, mens sletning er tilladt i begge ender.
- Output Begrænset Deque : output er begrænset i den ene ende, men indsættelse er tilladt i begge ender.
Operationer på bord
Her er en tabel, der viser indbyggede operationer af en deque i Python med beskrivelser og deres tilsvarende tidskompleksitet:
| Operation | Beskrivelse | Tidskompleksitet |
|---|---|---|
| tilføje(x) | Tilføjer x til højre ende af deque. | O(1) |
| appendleft(x) | Tilføjer x til venstre ende af deque. | O(1) |
| pop() | Fjerner og returnerer et element fra højre ende af deque. | O(1) |
| popleft() | Fjerner og returnerer et element fra venstre ende af deque. | O(1) |
| forlænge (igengående) | Tilføjer alle elementer fra iterable til højre ende af deque. | Okay) |
| extendleft(iterbar) | Tilføjer alle elementer fra iterable til venstre ende af deque (omvendt rækkefølge). | Okay) |
| fjerne (værdi) | Fjerner den første forekomst af value fra deque. Hæver ValueError hvis ikke fundet. | På) |
| rotere (n) | Roterer bordet n trin til højre. Hvis n er negativ roterer til venstre. | Okay) |
| klar() | Fjerner alle elementer fra deque. | På) |
| antal (værdi) | Tæller antallet af forekomster af value i deque. | På) |
| indeks (værdi) | Returnerer indekset for den første forekomst af value i deque. Hæver ValueError hvis ikke fundet. | På) |
| bagside() | Vender elementerne i deque på plads. | På) |
Tilføjelse og sletning af dekø-elementer
- tilføj (x): Tilføjer x til højre ende af deque.
- appendleft(x): Tilføjer x til venstre ende af deque.
- forlænge (iterbar): Tilføjer alle elementer fra den iterable til højre ende.
- extendleft(iterbar): Tilføjer alle elementer fra den iterable til venstre ende (i omvendt rækkefølge).
- fjern (værdi): Fjerner den første forekomst af den angivne værdi fra deque. Hvis værdien ikke findes, rejser det en ValueError.
- pop(): Fjerner og returnerer et element fra højre ende.
- popleft(): Fjerner og returnerer et element fra venstre ende.
- klar(): Fjerner alle elementer fra 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 )
Produktion:
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([])Adgang til vare og længde af deque
- Indeksering: Få adgang til elementer efter position ved hjælp af positive eller negative indekser.
- kun(): Returnerer antallet af elementer i 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 ))
Produktion
1 4 7
Tæl rotation og tilbageførsel af en deque
- antal (værdi): Denne metode tæller antallet af forekomster af et specifikt element i deque.
- rotere(n): Denne metode roterer bordet med n trin. Positiv n roterer til højre og negativ n roterer til venstre.
- bagside(): Denne metode vender om rækkefølgen af elementer i 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 )
Produktion
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])