logo

І на Python

Deque розшифровується як Double-Ended Queue. Це особливий тип структури даних, який дозволяє ефективно додавати та видаляти елементи з обох кінців.

На відміну від звичайних черг (які зазвичай слідують за схемою «Першим прийшов, першим вийшов»), двостороння чергу підтримує операції як FIFO, так і LIFO. Це робить його дуже гнучким і корисним у реальних програмах, таких як проблеми з розсувним вікном планування завдань і обробка даних у реальному часі.



приклад:

Python
from collections import deque # Declaring deque  de = deque(['name''age''DOB']) print(de) 

Вихід
deque(['name' 'age' 'DOB']) 
тому' title=

Навіщо нам потрібна deque

  • Він підтримує час O(1) для додавання/видалення елементів з обох кінців.
  • Це ефективніше, ніж списки для зовнішніх операцій.
  • Він може працювати і як черга (FIFO), і як стек (LIFO).
  • Ідеально підходить для планування проблем із ковзним вікном і обробки даних у реальному часі.
  • Він пропонує потужні вбудовані методи, наприклад appendleft() popleft() і rotate().

Типи обмеженого введення Deque

  • Deque з обмеженим введенням :  Введення обмежено з одного боку, а видалення дозволено з обох кінців.
  • Обмеження виведення Deque : вихід обмежений на одному кінці, але вставлення дозволено на обох кінцях.

Операції над deque 

Ось таблиця зі списком вбудованих операцій deque в Python з описами та їх відповідними часовими складностями:

скільки клавіш має клавіатура
Операція опис Часова складність
додати (x) Додаєxдо правого кінця дека.О(1)
appendleft(x) Додаєxдо лівого кінця дека.О(1)
поп() Видаляє та повертає елемент із правого кінця ряду.О(1)
popleft() Видаляє та повертає елемент із лівого кінця двох рядів.О(1)
розширити (ітерований) Додає всі елементи зiterableдо правого кінця дека.добре)
extendleft (ітераційний) Додає всі елементи зiterableдо лівого кінця дека (у зворотному порядку).добре)
видалити (значення) Видаляє перше входженняvalueвід дек. ПіднімаєValueErrorякщо не знайдено.O(n)
обертати (n) Обертає декуnкроки вправо. Якщоnвід'ємне обертається вліво.добре)
очистити() Видаляє всі елементи з deque.O(n)
кількість (значення) Підраховує кількість випадківvalueв деке.O(n)
індекс (значення) Повертає індекс першого входженняvalueв деке. ПіднімаєValueErrorякщо не знайдено.O(n)
зворотний() Перевертає елементи дека на місце.O(n)

Додавання та видалення елементів із черги

  • додати (x): Додає x у правий кінець двох рядків.
  • appendleft(x): Додає x до лівого кінця двох рядів.
  • розширити (ітерований): Додає всі елементи від iterable до правого кінця.
  • extendleft (ітераційний): Додає всі елементи від iterable до лівого кінця (у зворотному порядку).
  • видалити (значення): Видаляє перше входження вказаного значення з другої черги. Якщо значення не знайдено, виникає помилка ValueError.
  • поп(): Видаляє та повертає елемент з правого кінця.
  • popleft(): Видаляє та повертає елемент з лівого кінця.
  • очистити(): Видаляє всі елементи з deque.
Python
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([])

Доступ до елемента та довжина чергової черговості

  • Індексація: Доступ до елементів за позицією за додатними або від’ємними індексами.
  • тільки(): Повертає кількість елементів у двох рядках.
Python
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 

Підрахунок ротації та розвороту двійки

  • кількість (значення): Цей метод підраховує кількість входжень певного елемента в дві чергу.
  • обертати (n): Цей метод обертає двічі на n кроків. Додатне n обертається вправо, а від’ємне n – ліворуч.
  • зворотний(): Цей метод змінює порядок елементів у двох рядках.
Python
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])