És Pythonban
A deque a Double-Ended Queue rövidítése. Ez egy speciális típusú adatstruktúra, amely lehetővé teszi az elemek hatékony hozzáadását és eltávolítását mindkét végéről.
A normál várólistáktól eltérően (amelyek általában a First In First Out parancsot követik) a deque támogatja a FIFO és a LIFO műveleteket is. Ez nagyon rugalmassá és hasznossá teszi a valós alkalmazásokban, mint például a feladatütemezési csúszóablak problémák és a valós idejű adatfeldolgozás.
Példa:
Python from collections import deque # Declaring deque de = deque ([ 'name' 'age' 'DOB' ]) print ( de )
Kimenet
deque(['name' 'age' 'DOB'])
Miért van szükségünk dekára?
- Támogatja az O(1) időt az elemek hozzáadásához/eltávolításához mindkét végéről.
- Hatékonyabb, mint a listák a front-end műveletekhez.
- Működhet sorként (FIFO) és veremként (LIFO) is.
- Ideális csúszóablak problémák ütemezéséhez és valós idejű adatfeldolgozáshoz.
- Erőteljes beépített módszereket kínál, mint pl appendleft() popleft() és forog().
A korlátozott deque bemenet típusai
- Input Restricted Deque : A bevitel az egyik végén korlátozott, míg a törlés mindkét végén megengedett.
- Kimenet Korlátozott Deque : a kimenet az egyik végén korlátozott, de a beillesztés mindkét végén megengedett.
Műveletek a deque-n
Íme egy táblázat, amely felsorolja a Python deque beépített műveleteit leírásokkal és a hozzájuk tartozó időbeli összetettségekkel együtt:
| Művelet | Leírás | Idő összetettsége |
|---|---|---|
| hozzáfűzés(x) | Hozzáad x a deque jobb végére. | O(1) |
| bal oldali függelék (x) | Hozzáad x a deque bal végére. | O(1) |
| pop() | Eltávolít és visszaad egy elemet a deque jobb végéről. | O(1) |
| popleft() | Eltávolít és visszaad egy elemet a deque bal végéből. | O(1) |
| kiterjeszthető (iterálható) | Hozzáadja az összes elemet innen iterable a deque jobb végére. | Rendben van) |
| kinyújtott bal (iterálható) | Hozzáadja az összes elemet innen iterable a deque bal végére (fordított sorrend). | Rendben van) |
| eltávolítás(érték) | Eltávolítja az első előfordulását value a deque-ből. Emeli ValueError ha nem találják. | On) |
| forgatás (n) | Elforgatja a deque-t n lépések jobbra. Ha n a negatív balra forog. | Rendben van) |
| világos() | Eltávolítja az összes elemet a deque-ből. | On) |
| szám(érték) | Számolja az előfordulások számát value a deque-ben. | On) |
| index(érték) | Az első előfordulás indexét adja vissza value a deque-ben. Emeli ValueError ha nem találják. | On) |
| fordított() | Megfordítja a deque elemeit a helyükön. | On) |
Sorból álló elemek hozzáfűzése és törlése
- hozzáfűzés(x): Hozzáadja x-et a deque jobb végéhez.
- bal oldali függelék (x): Hozzáadja x-et a deque bal végéhez.
- kiterjeszthető (iterálható): Minden elemet hozzáad az iterálhatótól a jobb végéhez.
- kinyújtott bal (iterálható): Minden elemet hozzáad az iterálhatótól a bal véghez (fordított sorrendben).
- eltávolítás(érték): Eltávolítja a megadott érték első előfordulását a deque-ből. Ha az érték nem található, akkor ValueError-t vet fel.
- pop(): Eltávolít és visszaad egy elemet a jobb oldalról.
- popleft(): Eltávolít és visszaad egy elemet a bal oldalról.
- világos(): Eltávolítja az összes elemet a deque-ből.
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 )
Kimenet:
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([])A tétel elérése és a deque hossza
- Indexelés: Hozzáférés az elemekhez pozíció szerint pozitív vagy negatív indexekkel.
- csak(): A deque elemeinek számát adja vissza.
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 ))
Kimenet
1 4 7
Gróf forgatás és visszafordítás egy deque
- szám(érték): Ez a módszer megszámolja egy adott elem előfordulásának számát a deque-ben.
- forgatás (n): Ez a módszer n lépéssel elforgatja a deque-t. A pozitív n jobbra, a negatív n pedig balra forog.
- fordított(): Ez a módszer megfordítja az elemek sorrendjét a deque-ben.
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 )
Kimenet
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])