Filas – Python

Fila

Definição: Uma fila é uma estrutura de dados dinâmica que admite remoção de elementos e inserção de novos objetos. Mais especificamente, uma fila (= queue) é uma estrutura sujeita à seguinte regra de operação: sempre que houver uma remoção, o elemento removido é o que está na estrutura há mais tempo.

Em outras palavras, o primeiro objeto inserido na fila é também o primeiro a ser removido. Essa política é conhecida pela sigla FIFO (= First-In-First-Out).

Operações usuais:

  1. inserir(): insere um elemento no fim da fila;
  2. remover(): remove o primeiro elemento da fila;
  3. empty(): verifica se a fila está vazia.

Exemplo: Implemente um programa de gerenciamento de duas filas em um supermercado: Prioritária (idosos e gestantes) e Normal. A saída das pessoas da fila devem ocorrer da seguinte forma: a cada duas pessoas que saem da fila prioritária, uma sai da fila normal.

Primeiramente você deverá criar a classe Fila:

class Fila():
     def __init__(self):
         self.data = []

     def inserir(self, x):
         self.data.append(x)

     def remover(self):
         if len(self.data) > 0:
             return self.data.pop(0)

     def top(self):
          if len(self.data) > 0:
             return self.data[0]

     def empty(self):
         return not len(self.data) > 0

Definiremos dois Objetos “p” e “n” para as filas, e uma função “sair()” para gerenciar as saídas das filas.

p = Fila() # Objeto Fila prioritária
n = Fila() # Objeto Fila normal
aux = 0
def sair():
     global aux
     if p.empty():
         aux = 0
         n.remover()
     if n.empty():
         aux = aux + 1
         p.remover()
     if (aux < 2):
         aux = aux + 1
         p.remover()
     else:
         aux = 0
         n.remover()

Atribuiremos dados de exemplos e verificações.

#Dados iniciais exemplos de entradas nas filas
for k in [11,12,13,14,15,16,17,18,19,20]:
     n.inserir(k)
for k in [61,62,63,64,65,66,67,68]:
     p.inserir(k)
#Exibe o próximo a sair da fila
print("P: ",p.top()," - N: ",n.top())
#retira elementos da fila (Para cada 2 elementos da prioritária sairá 1 da normal)
sair()

Download: http://valci.com.br/download/notebook/Fila-Gerenciar_duas_filas_de_supermercado.ipynb