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: 1984 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 ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
# 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: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
# 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 |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





