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]

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: