CodeGym /Cours /Python SELF FR /File d'attente

File d'attente

Python SELF FR
Niveau 52 , Leçon 0
Disponible

7.1 Définition de la file d'attente et ses propriétés

File d'attente — c'est une structure de données abstraite qui représente une collection ordonnée d'éléments, organisée selon le principe "premier arrivé - premier parti" (First In, First Out, FIFO). Une file d'attente peut être comparée à une file de personnes dans un magasin : la première personne dans la file est la première à être servie.

Définition de la file d'attente et ses propriétés

Propriétés de la file d'attente :

  • FIFO (First In, First Out) : Le premier élément ajouté sera le premier élément supprimé.
  • Opérations limitées : La file d'attente prend en charge un ensemble limité d'opérations — ajout (enqueue), suppression (dequeue) et visualisation (peek) de l'élément en première position.
  • Accès unidirectionnel : L'accès aux éléments est possible uniquement à partir des côtés avant (front) et arrière (rear).
  • Simplicité de mise en œuvre : La file d'attente peut être facilement réalisée à l'aide d'un tableau ou d'une liste chaînée.

Principe de fonctionnement FIFO :

  • Ajout d'un élément (enqueue) : Un nouvel élément est ajouté à la fin de la file d'attente.
  • Suppression d'un élément (dequeue) : Le premier élément ajouté est retiré du début de la file d'attente.
  • Visualisation de l'élément en tête (peek) : Permet de voir l'élément en première position de la file d'attente sans le supprimer.

Les éléments de la file d'attente sont ajoutés d'un côté (arrière) et supprimés de l'autre côté (avant). Ainsi, le premier élément ajouté est le premier retiré.

7.2 Opérations principales

Opérations principales : enqueue, dequeue, peek

Opération enqueue : Ajoute un nouvel élément à la fin de la file d'attente.

Complexité temporelle : O(1).


from collections import deque

queue = deque()
queue.append(10)  # enqueue 10
queue.append(20)  # enqueue 20
print(queue)  # Sortie: deque([10, 20])

Opération dequeue : Supprime et retourne l'élément du début de la file d'attente.

Complexité temporelle : O(1).


from collections import deque

queue = deque()
queue.append(10)  # enqueue 10
queue.append(20)  # enqueue 20
print(queue)  # Sortie: deque([10, 20])

front_element = queue.popleft()  # dequeue
print(front_element)  # Sortie: 10
print(queue)  # Sortie: deque([20])

Opération peek : Retourne l'élément en première position de la file d'attente sans le supprimer.

Complexité temporelle : O(1).


from collections import deque

queue = deque()
queue.append(10)  # enqueue 10
queue.append(20)  # enqueue 20
print(queue)  # Sortie: deque([10, 20])

front_element = queue[0]  # peek
print(front_element)  # Sortie: 10

7.3 Exemples d'utilisation de la file d'attente

Examinons quelques exemples d'utilisation de la file d'attente.

1 Gestion des tâches d'impression

La file d'attente est utilisée pour gérer les tâches d'impression, où les documents sont ajoutés à la file et imprimés dans l'ordre de leur arrivée.


class PrinterQueue:
    def __init__(self):
        self.queue = deque()

    def add_job(self, job):
        self.queue.append(job)

    def print_job(self):
        if self.queue:
            job = self.queue.popleft()
            print(f"Impression : {job}")

# Exemple d'utilisation :
printer_queue = PrinterQueue()
printer_queue.add_job("Document1.pdf")
printer_queue.add_job("Document2.pdf")
printer_queue.print_job()  # Sortie: Impression : Document1.pdf
printer_queue.print_job()  # Sortie: Impression : Document2.pdf

2 Traitement des requêtes sur un serveur web

La file d'attente est utilisée pour gérer les requêtes des clients arrivant sur un serveur web. Les requêtes sont traitées dans l'ordre de leur arrivée.


class RequestQueue:
    def __init__(self):
        self.queue = deque()

    def add_request(self, request):
        self.queue.append(request)

    def process_request(self):
        if self.queue:
            request = self.queue.popleft()
            print(f"Traitement de la requête : {request}")

# Exemple d'utilisation :
request_queue = RequestQueue()
request_queue.add_request("GET /index.html")
request_queue.add_request("POST /submit-form")
request_queue.process_request()  # Sortie: Traitement de la requête : GET /index.html
request_queue.process_request()  # Sortie: Traitement de la requête : POST /submit-form

3 File de messages dans les systèmes d'échange de messages

La file d'attente est utilisée pour gérer les messages dans les systèmes d'échange d'informations (par exemple, dans les courtiers de messages). Les messages sont traités dans l'ordre de leur arrivée.


class MessageQueue:
    def __init__(self):
        self.queue = deque()

    def send_message(self, message):
        self.queue.append(message)

    def receive_message(self):
        if self.queue:
            message = self.queue.popleft()
            print(f"Message reçu : {message}")

# Exemple d'utilisation :
message_queue = MessageQueue()
message_queue.send_message("Hello")
message_queue.send_message("World")
message_queue.receive_message()  # Sortie: Message reçu : Hello
message_queue.receive_message()  # Sortie: Message reçu : World
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION