Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

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 FilaCircular

Quantidade 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

Link para compartilhar na Internet ou com seus amigos:

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

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 35 usuários muito felizes estudando em nosso site.