A v Pythonu
Deque znamená Double-Ended Queue. Jedná se o speciální typ datové struktury, která umožňuje efektivně přidávat a odebírat prvky z obou konců.
Na rozdíl od normálních front (které obvykle následují First In First Out) deque podporuje operace FIFO i LIFO. Díky tomu je velmi flexibilní a užitečný v aplikacích reálného světa, jako je plánování úloh s posuvnými okny a zpracování dat v reálném čase.
Příklad:
Python from collections import deque # Declaring deque de = deque ([ 'name' 'age' 'DOB' ]) print ( de )
Výstup
deque(['name' 'age' 'DOB'])
Proč potřebujeme deque
- Podporuje čas O(1) pro přidávání/odebírání prvků z obou konců.
- Pro front-end operace je to efektivnější než seznamy.
- Může fungovat jako fronta (FIFO) i jako zásobník (LIFO).
- Ideální pro plánování problémů s posuvnými okny a zpracování dat v reálném čase.
- Nabízí výkonné vestavěné metody jako appendleft() popleft() a střídat().
Typy omezeného vstupu Deque
- Input Restricted Deque : Vstup je omezen na jednom konci, zatímco mazání je povoleno na obou koncích.
- Omezený výstup Deque : výstup je omezen na jednom konci, ale vkládání je povoleno na obou koncích.
Operace na deque
Zde je tabulka se seznamem vestavěných operací deque v Pythonu s popisy a jejich odpovídající časovou složitostí:
| Operace | Popis | Časová složitost |
|---|---|---|
| připojit (x) | Přidá x na pravý konec deque. | O(1) |
| appendleft(x) | Přidá x na levý konec deque. | O(1) |
| pop() | Odebere a vrátí prvek z pravého konce deque. | O(1) |
| popleft() | Odebere a vrátí prvek z levého konce deque. | O(1) |
| rozšířit (opakovatelné) | Přidá všechny prvky z iterable na pravý konec deque. | dobře) |
| prodloužit doleva (iterovatelný) | Přidá všechny prvky z iterable na levý konec deque (obrácené pořadí). | dobře) |
| odstranit (hodnota) | Odstraní první výskyt value z deque. Zvyšuje ValueError pokud nebyl nalezen. | Na) |
| otočit (n) | Otočí deque n kroky doprava. Li n je negativní se otáčí doleva. | dobře) |
| jasný() | Odebere všechny prvky z deque. | Na) |
| počítat (hodnota) | Počítá počet výskytů value v deque. | Na) |
| index (hodnota) | Vrátí index prvního výskytu value v deque. Zvyšuje ValueError pokud nebyl nalezen. | Na) |
| zvrátit() | Obrátí prvky deque na místě. | Na) |
Připojování a odstraňování položek zařazených do fronty
- připojit (x): Přidá x na pravý konec deque.
- appendleft(x): Přidá x na levý konec deque.
- rozšířit (iterovatelné): Přidá všechny prvky z iterovatelného na pravý konec.
- extendleft (iterovatelné): Přidá všechny prvky z iterovatelného na levý konec (v opačném pořadí).
- odstranit (hodnota): Odebere první výskyt zadané hodnoty z deque. Pokud hodnota není nalezena, vyvolá ValueError.
- pop(): Odebere a vrací prvek z pravého konce.
- popleft(): Odebere a vrací prvek z levého konce.
- jasný(): Odebere všechny prvky z 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 )
výstup:
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([])Přístup k položce a délka deque
- Indexování: Přístup k prvkům podle pozice pomocí kladných nebo záporných indexů.
- pouze(): Vrátí počet prvků v 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 ))
Výstup
1 4 7
Počet otočení a obrácení deque
- počet (hodnota): Tato metoda počítá počet výskytů konkrétního prvku v deque.
- otočit (n): Tato metoda otočí deque o n kroků. Kladné n se otáčí doprava a záporné n se otáčí doleva.
- zvrátit(): Tato metoda obrátí pořadí prvků v 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 )
Výstup
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])