Deque - Trabalhando com LIFO e FIFO

This commit is contained in:
Luiz Otávio
2023-02-18 13:38:12 -03:00
parent 2c8a030bac
commit e79688d531

80
aula198.py Normal file
View File

@@ -0,0 +1,80 @@
# Deque - Trabalhando com LIFO e FIFO
# deque - Double-ended queue
#
# Lifo e fifo
# pilha e fila
# LIFO (Last In First Out)
# Pilha (stack)
# Significa que o último item a entrar será o primeiro a sair (list)
# Artigo:
# https://www.otaviomiranda.com.br/2020/pilhas-em-python-com-listas-stack/
# Vídeo:
# https://youtu.be/svWVHEihyNI
# Para tirar itens do final: O(1) Tempo constante
# Para tirar itens do início: O(n) Tempo Linear
from collections import deque
lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# ✅ Legal (LIFO com lista)
# 0 1 2 3 4 5 6 7 8 9
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lista.append(10)
# 0 1 2 3 4 5 6 7 8 9 10
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
lista.append(11)
# 0 1 2 3 4 5 6 7 8 9 10, 11
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
ultimo_removido = lista.pop()
# 0 1 2 3 4 5 6 7 8 9 10
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('Último: ', ultimo_removido)
print('Lista:', lista)
# 0 1 2 3 4 5 6 7 8 9 10
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print()
lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 🚫 Ruim (FIFO com lista)
# 0 1 2 3 4 5 6 7 8 9
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lista.insert(0, 10)
# 0 1 2 3 4 5 6 7 8 9, 10
# [10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lista.insert(0, 11)
# 0 1 2 3 4 5 6 7 8 9, 10 11
# [11, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
primeiro_removido = lista.pop(0) # 11
# 0 1 2 3 4 5 6 7 8 9, 10
# [10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print('Primeiro: ', primeiro_removido) # 11
print('Lista:', lista) # [10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print()
# FIFO (First In First Out)
# Filas (queue)
# Significa que o primeiro item a entrar será o primeiro a sair (deque)
# Artigo:
# https://www.otaviomiranda.com.br/2020/filas-em-python-com-deque-queue/
# Vídeo:
# https://youtu.be/RHb-8hXs3HE
# Para tirar itens do final: O(1) Tempo constante
# Para tirar itens do início: O(1) Tempo constante
# ✅ Legal (FIFO com deque)
fila_correta: deque[int] = deque()
fila_correta.append(3) # Adiciona no final
fila_correta.append(4) # Adiciona no final
fila_correta.append(5) # Adiciona no final
fila_correta.appendleft(2) # Adiciona no começo
fila_correta.appendleft(1) # Adiciona no começo
fila_correta.appendleft(0) # Adiciona no começo
print(fila_correta) # deque([0, 1, 2, 3, 4, 5])
fila_correta.pop() # 5
fila_correta.popleft() # 0
print(fila_correta) # deque([1, 2, 3, 4])