И в Python
Deque означава Double-Ended Queue. Това е специален тип структура от данни, която ви позволява ефективно да добавяте и премахвате елементи от двата края.
За разлика от нормалните опашки (които обикновено следват First In First Out) deque поддържа както FIFO, така и LIFO операции. Това го прави много гъвкав и полезен в приложения от реалния свят, като проблеми с плъзгащи се прозорци за планиране на задачи и обработка на данни в реално време.
Пример:
Python from collections import deque # Declaring deque de = deque ([ 'name' 'age' 'DOB' ]) print ( de )
Изход
deque(['name' 'age' 'DOB'])
Защо имаме нужда от deque
- Поддържа O(1) време за добавяне/премахване на елементи от двата края.
- Той е по-ефективен от списъците за предни операции.
- Може да функционира както като опашка (FIFO), така и като стек (LIFO).
- Идеален за планиране на проблеми с плъзгащи се прозорци и обработка на данни в реално време.
- Той предлага мощни вградени методи като appendleft() popleft() и завъртане().
Видове ограничено въвеждане на Deque
- Deque с ограничен вход : Въвеждането е ограничено от единия край, докато изтриването е разрешено от двата края.
- Ограничен изход Deque : изходът е ограничен в единия край, но вмъкването е разрешено и в двата края.
Операции върху deque
Ето таблица, в която са изброени вградените операции на deque в Python с описания и съответните времеви сложности:
| Операция | Описание | Времева сложност |
|---|---|---|
| добавям (x) | Добавя x до десния край на дека. | О(1) |
| добавка вляво (x) | Добавя x до левия край на дека. | О(1) |
| поп () | Премахва и връща елемент от десния край на деке. | О(1) |
| popleft() | Премахва и връща елемент от левия край на деке. | О(1) |
| разширяване (повтарящо се) | Добавя всички елементи от iterable до десния край на дека. | добре) |
| удължаване наляво (повтарящо се) | Добавя всички елементи от iterable до левия край на деке (обърнат ред). | добре) |
| премахване (стойност) | Премахва първото появяване на value от дека. Повишава ValueError ако не се намери. | O(n) |
| завъртане (n) | Завърта дека n стъпки надясно. Ако n е отрицателна се върти наляво. | добре) |
| ясно() | Премахва всички елементи от deque. | O(n) |
| брой (стойност) | Отчита броя на срещанията на value в дека. | O(n) |
| индекс (стойност) | Връща индекса на първото появяване на value в дека. Повишава ValueError ако не се намери. | O(n) |
| обратен() | Обръща елементите на deque на място. | O(n) |
Добавяне и изтриване на елементи от опашката
- добавям (x): Добавя x към десния край на двойката.
- добавяне наляво (x): Добавя x към левия край на двойката.
- разширяване (итерируем): Добавя всички елементи от итерируемия до десния край.
- разширение наляво (повтарящо се): Добавя всички елементи от итерируемия до левия край (в обратен ред).
- премахване (стойност): Премахва първото срещане на посочената стойност от deque. Ако стойността не бъде намерена, тя повдига ValueError.
- поп(): Премахва и връща елемент от десния край.
- popleft(): Премахва и връща елемент от левия край.
- ясно (): Премахва всички елементи от 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 )
Изход:
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([])Достъп до елемент и дължина на 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 ))
Изход
1 4 7
Преброяване на ротация и обръщане на двойка
- брой (стойност): Този метод отчита броя на срещанията на конкретен елемент в deque.
- завъртане (n): Този метод завърта deque с n стъпки. Положителното n се върти надясно, а отрицателното n се върти наляво.
- обратен(): Този метод обръща реда на елементите в 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 )
Изход
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])