Fila Python: FIFO, exemplo LIFO

Índice:

Anonim

O que é Python Queue?

Uma fila é um contêiner que contém dados. Os dados inseridos primeiro serão removidos primeiro e, portanto, uma fila também é chamada de "Primeiro a entrar, primeiro a sair" (FIFO). A fila tem duas extremidades frontal e traseira. Os itens são inseridos pela parte traseira e removidos pela parte frontal.

Neste tutorial Python, você aprenderá:

  • O que é Python Queue?
  • Como funciona o Python Queue?
  • Tipos de fila em Python
  • Instalação de fila Python
  • Métodos disponíveis nas classes Queue e LifoQueue
  • Exemplo de fila de primeiro a entrar, primeiro a sair
  • Exemplo de fila de último a entrar, primeiro a sair
  • Adicionar mais de 1 item em uma fila
  • Fila de classificação
  • Invertendo a fila

Como funciona o Python Queue?

A fila pode ser facilmente comparada com o exemplo do mundo real - a fila de pessoas esperando em uma fila no balcão de passagens, a pessoa que estiver em primeiro lugar receberá a passagem primeiro, seguida pela próxima pessoa e assim por diante. A mesma lógica vale para a estrutura de dados da fila.

Aqui está uma representação esquemática da fila:

A parte traseira representa o ponto onde os itens são inseridos na fila. Neste exemplo, 7 é o valor para isso.

A frente representa o ponto onde os itens da fila serão removidos. Se você remover um item da fila, o primeiro elemento que obterá é 1, conforme mostrado na figura.

O item 1 foi o primeiro a ser inserido na fila e, ao retirá-lo, é o primeiro a sair. Portanto, a fila é chamada de FIRST IN FIRST OUT (FIFO)

Em uma fila, os itens são removidos em ordem e não podem ser removidos no meio. Você simplesmente não pode remover o item 5 aleatoriamente da fila, para fazer isso você terá que remover todos os itens antes de 5. Os itens na fila serão removidos na ordem em que forem inseridos.

Tipos de fila em Python

Existem basicamente dois tipos de fila em Python:

  • Fila do primeiro a entrar, primeiro a sair: Para isso, o elemento que for primeiro será o primeiro a sair.

    Para trabalhar com FIFO, você deve chamar a classe Queue () do módulo de fila.

  • Fila de último a entrar, primeiro a sair: Aqui, o elemento que for inserido por último será o primeiro a sair.

    Para trabalhar com LIFO, você deve chamar a classe LifoQueue () do módulo de fila.

Instalação de fila Python

É muito fácil trabalhar com fila em python. Aqui estão as etapas a seguir para usar a fila em seu código.

Etapa 1) Basta importar o módulo de fila, conforme mostrado abaixo:

import queue

O módulo está disponível por padrão com o python e você não precisa de nenhuma instalação adicional para começar a trabalhar com a fila. Existem 2 tipos de fila FIFO (primeiro a entrar, primeiro a sair) e LIFO (último a entrar, primeiro a sair).

Etapa 2) Para trabalhar com a fila FIFO, chame a classe Queue usando o módulo de fila importado conforme mostrado abaixo:

import queueq1 = queue.Queue()

Etapa 3) Para trabalhar com a fila LIFO, chame a classe LifoQueue () conforme mostrado abaixo:

import queueq1 = queue.LifoQueue()

Métodos disponíveis nas classes Queue e LifoQueue

A seguir estão os métodos importantes disponíveis nas classes Queue e LifoQueue:

  • put (item): Isso colocará o item na fila.
  • get (): Isso retornará a você um item da fila.
  • empty (): Retornará verdadeiro se a fila estiver vazia e falso se houver itens presentes.
  • qsize (): retorna o tamanho da fila.
  • full (): retorna verdadeiro se a fila estiver cheia, caso contrário, é falso.

Exemplo de fila de primeiro a entrar, primeiro a sair

No caso do primeiro a entrar, primeiro a sair, o elemento que vai primeiro será o primeiro a sair.

Adicionar um item em uma fila

Vamos trabalhar em um exemplo para adicionar um item a uma fila. Para começar a trabalhar com a fila, primeiro importe a fila do módulo, conforme mostrado no exemplo abaixo.

Para adicionar um item, você pode usar o método put () conforme mostrado no exemplo:

import queueq1 = queue.Queue()q1.put(10) #this will additem 10 to the queue.

Por padrão, o tamanho da fila é infinito e você pode adicionar qualquer número de itens a ela. Caso queira definir o tamanho da fila o mesmo pode ser feito da seguinte forma

import queueq1 = queue.Queue(5) #The max size is 5.q1.put(1)q1.put(2)q1.put(3)q1.put(4)q1.put(5)print(q1.full()) # will return true.

Resultado:

True

Agora, o tamanho da fila é 5 e não levará mais do que 5 itens, e o método q1.full () retornará verdadeiro. Adicionar mais itens não executará mais o código.

Remova um item da fila

Para remover um item da fila, você pode usar o método chamado get (). Este método permite itens da fila quando chamados.

O exemplo a seguir mostra como remover um item da fila.

import queueq1 = queue.Queue()q1.put(10)item1 = q1.get()print('The item removed from the queue is ', item1)

Resultado:

The item removed from the queue is 10

Exemplo de fila de último a entrar, primeiro a sair

No caso do último na fila de saída, o elemento inserido por último será o primeiro a sair.

Para trabalhar com LIFO, ou seja, o último na fila de saída, precisamos importar o módulo de fila e usar o método LifoQueue ().

Adicionar um item em uma fila

Aqui, entenderemos como adicionar um item à fila LIFO.

import queueq1 = queue.LifoQueue()q1.put(10)

Você deve usar o método put () no LifoQueue, conforme mostrado no exemplo acima.

Remova um item da fila

Para remover um item do LIFOqueue, você pode usar o método get ().

import queueq1 = queue.LifoQueue()q1.put(10)item1 = q1.get()print('The item removed from the LIFO queue is ', item1)

Resultado:

The item removed from the LIFO queue is 10

Adicionar mais de 1 item em uma fila

Nos exemplos acima, vimos como adicionar um único item e remover o item para FIFO e LIFOqueue. Agora veremos como adicionar mais de um item e também removê-lo.

Adicionar um item em um FIFOqueue

import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue

Remova um item do FIFOqueue

import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queuewhile not q1.empty():print("The value is ", q1.get()) # get() will remove the item from the queue.

Resultado:

The value is 0The value is 1The value is 2The value is 3The value is 4The value is 5The value is 6The value is 7The value is 8The value is 9The value is 10The value is 11The value is 12The value is 13The value is 14The value is 15The value is 16The value is 17The value is 18The value is 19

Adicionar um item em um LIFOqueue

import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue

Remova um item do LIFOqueue

import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queuewhile not q1.empty():print("The value is ", q1.get()) # get() will remove the item from the queue. 

Resultado:

The value is 19The value is 18The value is 17The value is 16The value is 15The value is 14The value is 13The value is 12The value is 11The value is 10The value is 9The value is 8The value is 7The value is 6The value is 5The value is 4The value is 3The value is 2The value is 1The value is 0

Fila de classificação

O exemplo a seguir mostra a classificação da fila. O algoritmo usado para classificação é a classificação por bolha.

import queueq1 = queue.Queue()#Addingitems to the queueq1.put(11)q1.put(5)q1.put(4)q1.put(21)q1.put(3)q1.put(10)#using bubble sort on the queuen = q1.qsize()for i in range(n):x = q1.get() # the element is removedfor j in range(n-1):y = q1.get() # the element is removedif x> y :q1.put(y) #the smaller one is put at the start of the queueelse:q1.put(x) # the smaller one is put at the start of the queuex = y # the greater one is replaced with x and compared again with nextelementq1.put(x)while (q1.empty() == False):print(q1.queue[0], end = " ")q1.get()

Resultado:

3 4 5 10 11 21

Invertendo a fila

Para reverter a fila, você pode usar outra fila e recursão.

O exemplo a seguir mostra como reverter a fila.

Exemplo:

import queueq1 = queue.Queue()q1.put(11)q1.put(5)q1.put(4)q1.put(21)q1.put(3)q1.put(10)def reverseQueue (q1src, q2dest) :buffer = q1src.get()if (q1src.empty() == False) :reverseQueue(q1src, q2dest) #using recursionq2dest.put(buffer)return q2destq2dest = queue.Queue()qReversed = reverseQueue(q1,q2dest)while (qReversed.empty() == False):print(qReversed.queue[0], end = " ")qReversed.get()

Resultado:

10 3 21 4 5 11

Resumo:

  • Uma fila é um contêiner que contém dados. Existem dois tipos de Fila, FIFO e LIFO.
  • Para um FIFO (Fila do primeiro a entrar, primeiro a sair), o elemento que vai primeiro será o primeiro a sair.
  • Para um UEPS (Fila do último a entrar, primeiro a sair), o elemento inserido por último será o primeiro a sair.
  • Um item em uma fila é adicionado usando o método put (item).
  • Para remover um item, o método get () é usado.