Python File d'attente : exemple FIFO, LIFO

Qu'est-ce que le Python File d'attente?

Une file d'attente est un conteneur qui contient des donnรฉes. Les donnรฉes saisies en premier seront supprimรฉes en premier, c'est pourquoi une file d'attente est รฉgalement appelรฉe ยซ Premier entrรฉ, premier sorti ยป (FIFO). La file d'attente a deux extrรฉmitรฉs avant et arriรจre. Les articles sont saisis par l'arriรจre et retirรฉs par l'avant.

Comment Python Travail en file d'attente ?

La file d'attente peut รชtre facilement comparรฉe ร  l'exemple du monde rรฉel : la file de personnes faisant la queue au guichet, la personne debout en premier recevra le billet en premier, suivie de la personne suivante et ainsi de suite. La mรชme logique s'applique รฉgalement ร  la structure des donnรฉes de file d'attente.

Voici une reprรฉsentation schรฉmatique de la file d'attente :

Python Travail en file d'attente

Le Arriรจre reprรฉsente le point oรน les รฉlรฉments sont insรฉrรฉs dans la file d'attente. Dans cet exemple, 7 est la valeur pour cela.

Le Avant reprรฉsente le point oรน les รฉlรฉments de la file d'attente seront supprimรฉs. Si vous supprimez un รฉlรฉment de la file d'attente, le premier รฉlรฉment que vous obtiendrez est 1, comme le montre la figure.

L'รฉlรฉment 1 a รฉtรฉ le premier ร  รชtre insรฉrรฉ dans la file d'attente, et lors de sa suppression, il est le premier ร  sortir. La file d'attente s'appelle donc FIRST IN FIRST OUT (FIFO).

Python Travail en file d'attente

Dans une file d'attente, les รฉlรฉments sont supprimรฉs dans l'ordre et ne peuvent pas รชtre supprimรฉs entre les deux. Vous ne pouvez tout simplement pas supprimer l'รฉlรฉment 5 au hasard de la file d'attente, pour ce faire, vous devrez supprimer tous les รฉlรฉments avant 5. Les รฉlรฉments de la file d'attente seront supprimรฉs dans l'ordre dans lequel ils sont insรฉrรฉs.

Types de file d'attente dans Python

Il existe principalement deux types de files d'attente Python:

  • File d'attente Premier entrรฉ, premier sorti : Pour cela, l'รฉlรฉment qui va en premier sera le premier ร  sortir. Pour travailler avec FIFO, il faut appeler File d'attente() classe du module de file dโ€™attente.
  • File d'attente Dernier entrรฉ, premier sorti : Ici, l'รฉlรฉment entrรฉ en dernier sera le premier ร  sortir. Pour travailler avec LIFO, vous devez appeler LifoQueue() classe du module de file dโ€™attente.

Python Installation de la file d'attente

Il est trรจs simple de travailler avec une file d'attente en python. Voici les รฉtapes ร  suivre pour utiliser la file d'attente dans votre code.

ร‰tape 1) Il vous suffit d'importer le module de file d'attente, comme indiquรฉ ci-dessous :

import queue

Le module est disponible par dรฉfaut avec python et vous n'avez besoin d'aucune installation supplรฉmentaire pour commencer ร  travailler avec la file d'attente. Il existe 2 types de file d'attente FIFO (premier entrรฉ, premier sorti) et LIFO (dernier entrรฉ, premier sorti).

ร‰tape 2) Pour travailler avec la file d'attente FIFO, appelez la classe Queue ร  l'aide du module de file d'attente importรฉ comme indiquรฉ ci-dessous :

import queue
q1 = queue.Queue()

ร‰tape 3) Pour travailler avec la file d'attente LIFO, appelez la classe LifoQueue() comme indiquรฉ ci-dessous :

import queue
q1 = queue.LifoQueue()

Mรฉthodes disponibles dans les classes Queue et LifoQueue

Voici les mรฉthodes importantes disponibles dans les classes Queue et LifoQueue :

  • mettre(รฉlรฉment): Cela placera l'รฉlรฉment dans la file d'attente.
  • obtenir(): Cela vous renverra un รฉlรฉment de la file d'attente.
  • vide(): Il retournera vrai si la file d'attente est vide et faux si des รฉlรฉments sont prรฉsents.
  • qsize() : renvoie la taille de la file d'attente.
  • complet(): renvoie vrai si la file d'attente est pleine, sinon faux.

Exemple de file d'attente premier entrรฉ, premier sorti

Dans le cas du premier entrรฉ, premier sorti, lโ€™รฉlรฉment qui va en premier sera le premier ร  sortir.

Ajouter un รฉlรฉment dans une file d'attente

Travaillons sur un exemple pour ajouter un รฉlรฉment dans une file d'attente. Pour commencer ร  travailler avec la file d'attente, importez d'abord la file d'attente du module, comme indiquรฉ dans l'exemple ci-dessous.

Pour ajouter un รฉlรฉment, vous pouvez utiliser la mรฉthode put() comme indiquรฉ dans l'exemple :

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

Par dรฉfaut, la taille de la file d'attente est infinie et vous pouvez y ajouter n'importe quel nombre d'รฉlรฉments. Si vous souhaitez dรฉfinir la taille de la file d'attente, la mรชme chose peut รชtre faite comme suit

import queue
q1 = 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.

Sortie :

True

Dรฉsormais, la taille de la file d'attente est de 5, et elle ne prendra pas plus de 5 รฉlรฉments, et la mรฉthode q1.full() retournera true. Lโ€™ajout dโ€™รฉlรฉments supplรฉmentaires nโ€™exรฉcutera plus le code.

Supprimer un รฉlรฉment de la file d'attente

Pour supprimer un รฉlรฉment de la file d'attente, vous pouvez utiliser la mรฉthode appelรฉe get(). Cette mรฉthode autorise les รฉlรฉments de la file dโ€™attente lorsquโ€™elle est appelรฉe.

L'exemple suivant montre comment supprimer un รฉlรฉment de la file d'attente.

import queue
q1 = queue.Queue()
q1.put(10)

item1 = q1.get()

print('The item removed from the queue is ', item1)

Sortie :

The item removed from the queue is  10

Exemple de file d'attente Dernier entrรฉ, premier sorti

Dans le cas du dernier dans la file d'attente du premier sorti, l'รฉlรฉment entrรฉ en dernier sera le premier ร  sortir.

Pour travailler avec LIFO, c'est-ร -dire dernier dans la file d'attente, premier sorti, nous devons importer le module de file d'attente et utiliser la mรฉthode LifoQueue().

Ajouter un รฉlรฉment dans une file d'attente

Ici, nous comprendrons comment ajouter un รฉlรฉment ร  la file d'attente LIFO.

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

Vous devez utiliser la mรฉthode put() sur LifoQueue, comme indiquรฉ dans l'exemple ci-dessus.

Supprimer un รฉlรฉment de la file d'attente

Pour supprimer un รฉlรฉment de la file d'attente LIFO, vous pouvez utiliser la mรฉthode get().

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

item1 = q1.get()

print('The item removed from the LIFO queue is ', item1)

Sortie :

The item removed from the LIFO queue is  10

Ajouter plus d'un รฉlรฉment dans une file d'attente

Dans les exemples ci-dessus, nous avons vu comment ajouter un seul รฉlรฉment et supprimer l'รฉlรฉment pour FIFO et LIFOqueue. Nous allons maintenant voir comment ajouter plus dโ€™un รฉlรฉment et รฉgalement le supprimer.

Ajouter un รฉlรฉment dans une file d'attente FIFO

import queue
q1 = queue.Queue()

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

Supprimer un รฉlรฉment de la file d'attente FIFO

import queue
q1 = queue.Queue()

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

while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

Sortie :

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

Ajouter un รฉlรฉment dans une file d'attente LIFO

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

Supprimer un รฉlรฉment de la file d'attente LIFO

import queue
q1 = queue.LifoQueue()

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


while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

Sortie :

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

File d'attente de tri

L'exemple suivant montre le tri en file d'attente. L'algorithme utilisรฉ pour le tri est le tri ร  bulles.

import queue
q1 = queue.Queue()
#Addingitems to the queue
q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

#using bubble sort on the queue
n =  q1.qsize()
for i in range(n):
    x = q1.get() # the element is removed
    for j in range(n-1):
        y = q1.get() # the element is removed
        if x > y :  
            q1.put(y)   #the smaller one is put at the start of the queue
        else:
            q1.put(x)  # the smaller one is put at the start of the queue
            x = y     # the greater one is replaced with x and compared again with nextelement
    q1.put(x)

while (q1.empty() == False): 
print(q1.queue[0], end = " ")  
        q1.get()

Sortie :

3 4 5 10 11 21

Revremplir la file d'attente

Pour inverser la file d'attente, vous pouvez utiliser une autre file d'attente et une rรฉcursivitรฉ.

L'exemple suivant montre comment inverser la file d'attente.

Exemple :

import queue
q1 = 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 recursion
    q2dest.put(buffer)
return q2dest

q2dest = queue.Queue()
qReversed = reverseQueue(q1,q2dest)

while (qReversed.empty() == False): 
print(qReversed.queue[0], end = " ")  
        qReversed.get()

Sortie :

10 3 21 4 5 11

Rรฉsumรฉ

  • Une file d'attente est un conteneur qui contient des donnรฉes. Il existe deux types de file d'attente, FIFO et LIFO.
  • Pour une file d'attente FIFO (First in First out Queue), l'รฉlรฉment qui passe en premier sera le premier ร  sortir.
  • Pour un LIFO (Last in First out Queue), l'รฉlรฉment entrรฉ en dernier sera le premier ร  sortir.
  • Un รฉlรฉment dans une file d'attente est ajoutรฉ ร  l'aide de la mรฉthode put(item).
  • Pour supprimer un รฉlรฉment, la mรฉthode get() est utilisรฉe.

Rรฉsumez cet article avec :