Você está aqui: Python ::: Estruturas de Dados ::: Filas |
Como criar uma fila circular em Python usando um vetor e programação orientada a objetos - A classe FilaCircularQuantidade de visualizações: 1719 vezes |
Uma das formas mais comuns de se criar uma fila em Python é usando um vetor de tipos primitivos ou referências a objetos. No entanto, à medida que movemos os ponteiros que marcam o início e o final da fila, espaços no vetor são desperdiçados, a menos que nosso código mova os elementos de forma explícita, o que pode tornar nossos algorítmos mais lentos. Um recurso muito interessante para aproveitar esses espaços descartados, é usar uma lista circular, na qual o marcador de fim da fila é incrementado de forma circular, em geral, usando o operador de módulo (%). Nesta dica mostrarei como criar uma fila circular em Python usando programação orientada a objetos, ou seja, vamos criar a classe FilaCircular e usar um vetor de inteiros (que será um objeto List). Veja o código completo para a lista circular usando vetores em Python: Código para filacircular.py # definição da classe FilaCircular class FilaCircular: # construtor da classe def __init__(self, capacidade): # vetor usado para guardar os elementos self.elementos = [None] * capacidade # para controlar o início da fila self.inicio = 0 # para controlar o final da fila self.fim = 0 # para registrar o tamanho da fila self.tamanho = 0 # manter um registro da capacidade self.capacidade = capacidade # método que permite verificar se a fila está cheia def is_cheia(self): # a capacidade é igual ao tamanho da fila? return self.capacidade == self.tamanho # método que permite enfileirar um novo valor na fila def enfileirar(self, valor): # a fila está cheia? if self.is_cheia(): raise Exception("A fila está cheia") # insere o novo elemento no final da fila self.elementos[self.fim] = valor # calcula o novo índice do final da fila self.fim = (self.fim + 1) % self.capacidade # incrementa o tamanho da fila self.tamanho += 1 # mostra uma mensagem de sucesso para fins de depuração print("O valor {0} foi enfileirado.".format(valor)) # método que permite desenfileirar o elemento na frente da fila def desenfileirar(self): # a fila está vazia? if self.is_vazia(): raise Exception("A fila está vazia") # a fila não está vazia. Vamos retornar o elemento na frente valor = self.elementos[self.inicio] # ajustamos o ponteiro para o início da fila self.inicio = (self.inicio + 1) % self.capacidade # diminuimos o tamanho da fila self.tamanho -= 1 # retorna o elemento removido return valor # método que permite verificar se a fila está vazia def is_vazia(self): # o tamanho da fila é 0? return self.tamanho == 0 # método que permite exibir o conteúdo da fila def exibir(self): if not self.is_vazia(): # varremos os elementos da fila print("Elementos na fila:", end=" ") for i in range(self.inicio, self.fim): print(self.elementos[i], end=" ") print("\nO elemento no início da fila é: {0}".format(self.elementos[self.inicio])) print("O elemento no final da fila é: {0}".format(self.elementos[self.fim - 1])) print("O índice do elemento no início da fila é: {0}".format(self.inicio)) print("O índice do elemento no final da fila é: {0}".format(self.fim - 1)) Código para principal.py: # vamos importar a classe FilaCircular from filacircular import FilaCircular # função principal do programa def main(): # vamos criar uma nova fila com capacidade para 10 elementos fila = FilaCircular(10) # vamos enfileirar 4 valores if not fila.is_cheia(): fila.enfileirar(30) fila.enfileirar(19) fila.enfileirar(73) fila.enfileirar(58) else: print("A fila está cheia") # agora vamos exibir o conteúdo da fila if not fila.is_vazia(): fila.exibir() # vamos desenfileirar 3 valores if not fila.is_vazia(): valor = fila.desenfileirar() print("O valor {0} foi desenfileirado.".format(valor)) if not fila.is_vazia(): valor = fila.desenfileirar() print("O valor {0} foi desenfileirado.".format(valor)) if not fila.is_vazia(): valor = fila.desenfileirar() print("O valor {0} foi desenfileirado.".format(valor)) # agora vamos exibir o conteúdo da fila novamente if not fila.is_vazia(): fila.exibir() if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: O valor 30 foi enfileirado. O valor 19 foi enfileirado. O valor 73 foi enfileirado. O valor 58 foi enfileirado. Elementos na fila: 30 19 73 58 O elemento no início da fila é: 30 O elemento no final da fila é: 58 O índice do elemento no início da fila é: 0 O índice do elemento no final da fila é: 3 O valor 30 foi desenfileirado. O valor 19 foi desenfileirado. O valor 73 foi desenfileirado. Elementos na fila: 58 O elemento no início da fila é: 58 O elemento no final da fila é: 58 O índice do elemento no início da fila é: 3 O índice do elemento no final da fila é: 3 |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
C++ - Programação Orientada a Objetos em C++ - Como criar e usar métodos estáticos em suas classes C++ |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |