class ProdigiFila:
def __init__(self, capacidade_inicial=10):
self.capacidade = capacidade_inicial
self.fila = [None] * self.capacidade
self.inicio = 0
self.fim = 0
self.tamanho = 0
def esta_vazia(self):
return self.tamanho == 0
def esta_cheia(self):
return self.tamanho == self.capacidade
def redimensionar(self):
nova_capacidade = self.capacidade * 2
nova_fila = [None] * nova_capacidade
# Copia os elementos para a nova fila
for i in range(self.tamanho):
nova_fila[i] = self.fila[(self.inicio + i) % self.capacidade]
self.fila = nova_fila
self.capacidade = nova_capacidade
self.inicio = 0
self.fim = self.tamanho
print(f"Fila redimensionada para capacidade: {self.capacidade}")
def enfileirar(self, elemento):
if self.esta_cheia():
self.redimensionar()
self.fila[self.fim] = elemento
self.fim = (self.fim + 1) % self.capacidade
self.tamanho += 1
def desenfileirar(self):
if self.esta_vazia():
raise IndexError("Fila vazia - não é possível desenfileirar")
elemento = self.fila[self.inicio]
self.fila[self.inicio] = None # Boa prática para evitar memória "suja"
self.inicio = (self.inicio + 1) % self.capacidade
self.tamanho -= 1
return elemento
def __str__(self):
return "[" + ", ".join(str(self.fila[(self.inicio + i) % self.capacidade]) for i in range(self.tamanho)) + "]"
fila = ProdigiFila(3)
fila.enfileirar("A")
fila.enfileirar("B")
fila.enfileirar("C")
print(fila)
fila.enfileirar("D") # Deve acionar o redimensionamento
print(fila) # Deve mostrar: [A, B, C, D]
fila.desenfileirar()
print(fila) # Deve mostrar: [B, C, D]
To embed this program on your website, copy the following code and paste it into your website's HTML: