E em Python
Um deque significa fila dupla. É um tipo especial de estrutura de dados que permite adicionar e remover elementos de ambas as extremidades com eficiência.
Ao contrário das filas normais (que geralmente seguem First In First Out), um deque suporta operações FIFO e LIFO. Isso o torna muito flexível e útil em aplicações do mundo real, como problemas de janela deslizante de agendamento de tarefas e processamento de dados em tempo real.
Exemplo:
Python from collections import deque # Declaring deque de = deque ([ 'name' 'age' 'DOB' ]) print ( de )
Saída
deque(['name' 'age' 'DOB'])
Por que precisamos de deque
- Ele suporta tempo O(1) para adicionar/remover elementos de ambas as extremidades.
- É mais eficiente que listas para operações front-end.
- Pode funcionar tanto como fila (FIFO) quanto como pilha (LIFO).
- Ideal para agendar problemas de janelas deslizantes e processamento de dados em tempo real.
- Ele oferece métodos integrados poderosos como acrescentar à esquerda() popesquerda() e girar().
Tipos de entrada Deque restrita
- Deque restrito de entrada : a entrada é limitada em uma extremidade, enquanto a exclusão é permitida em ambas as extremidades.
- Deque restrito de saída : a saída é limitada em uma extremidade, mas a inserção é permitida em ambas as extremidades.
Operações no deque
Aqui está uma tabela listando as operações integradas de um deque em Python com descrições e suas complexidades de tempo correspondentes:
| Operação | Descrição | Complexidade de tempo |
|---|---|---|
| acrescentar (x) | Adiciona x para a extremidade direita do deque. | O(1) |
| anexar à esquerda (x) | Adiciona x para a extremidade esquerda do deque. | O(1) |
| pop() | Remove e retorna um elemento da extremidade direita do deque. | O(1) |
| popesquerda() | Remove e retorna um elemento da extremidade esquerda do deque. | O(1) |
| estender (iterável) | Adiciona todos os elementos de iterable para a extremidade direita do deque. | Tudo bem) |
| estender à esquerda (iterável) | Adiciona todos os elementos de iterable para a extremidade esquerda do deque (ordem inversa). | Tudo bem) |
| remover(valor) | Remove a primeira ocorrência de value do deque. Aumenta ValueError se não for encontrado. | Sobre) |
| girar (n) | Gira o deque n passos para a direita. Se n é negativo gira para a esquerda. | Tudo bem) |
| claro() | Remove todos os elementos do deque. | Sobre) |
| contagem (valor) | Conta o número de ocorrências de value na deque. | Sobre) |
| índice (valor) | Retorna o índice da primeira ocorrência de value na deque. Aumenta ValueError se não for encontrado. | Sobre) |
| reverter() | Inverte os elementos do deque no lugar. | Sobre) |
Anexando e excluindo itens retirados da fila
- acrescentar (x): Adiciona x à extremidade direita do deque.
- acrescentar à esquerda (x): Adiciona x à extremidade esquerda do deque.
- estender (iterável): Adiciona todos os elementos do iterável à extremidade direita.
- estender à esquerda (iterável): Adiciona todos os elementos do iterável à extremidade esquerda (na ordem inversa).
- remover (valor): Remove a primeira ocorrência do valor especificado do deque. Se o valor não for encontrado, gera um ValueError.
- pop(): Remove e retorna um elemento da extremidade direita.
- popesquerda(): Remove e retorna um elemento da extremidade esquerda.
- claro(): Remove todos os elementos do 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 )
Saída:
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([])Acessando item e comprimento do deque
- Indexação: Acesse elementos por posição usando índices positivos ou negativos.
- apenas(): Retorna o número de elementos no 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 ))
Saída
1 4 7
Contagem de rotação e reversão de um deque
- contagem (valor): Este método conta o número de ocorrências de um elemento específico no deque.
- girar (n): Este método gira o deque em n etapas. N positivo gira para a direita e n negativo gira para a esquerda.
- reverter(): Este método inverte a ordem dos elementos no 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 )
Saída
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])