Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Développement Dernière mise à jour : 25 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Les structures de données jouent un rôle clé dans le monde de la programmation. Elles nous aident à organiser nos données de manière à ce qu'elles puissent être utilisées efficacement. La fichier d'attente est l'une des structures de données les plus simples qui soient

Dans cet article, nous allons découvrir la fichier d'attente et son implémentation en Python

Qu'est-ce qu'un fichier d'attente ?

Une fichier d'attente est une structure de données linéaire qui suit le principe FIFO (premier entré/premier sorti) ). Elle est opposée à la structure de données Stack

Nous pouvons comparer la fichier d'attente à une fichier d'attente réelle au guichet d'un cinéma. Voici l'illustration d'une file d'attente

Si vous observez la fiche d'attente au guichet, la deuxième personne ne peut se rendre au guichet que lorsque la première personne a terminé son travail. Ici, la première personne se présente au guichet, puis la seconde. Les personnes suivent donc le principe FIFO (premier entré/premier sorti) . La personne qui arrive en premier termine son travail en premier. Nous pouvons voir des fichiers d'attente similaires dans notre vie quotidienne

La structure de données des fichiers d'attente suit le même principe. Vous savez maintenant ce que sont les fichiers d'attente et leur principe. Voyons maintenant les opérations qui peuvent être effectuées sur une structure de données de fichier d'attente

Opérations dans un fichier d'attente

Comme pour la pile, nous trouvons deux opérations principales dans une structure de données de fichier d'attente

enqueue(données)

Ajoute de nouvelles données à la file d'attente à la fin. Le côté est appelé l'arrière

dequeue()

Supprimez les données de l'avant de la file d'attente. Le côté est appelé l'avant

Voyons les illustrations des opérations de file d'attente pour une meilleure compréhension. Une image est plus parlante qu'un millier de mots

Nous pouvons écrire quelques fonctions d'aide pour obtenir plus d'informations sur la file d'attente. Il n'y a pas de limite au nombre de fonctions d'aide que vous pouvez avoir. Pour l'instant, nous nous en tiendrons aux fonctions les plus importantes mentionnées ci-dessous

arrière()

Renvoie le premier élément à l'extrémité de la file d'attente

front()

Renvoie le premier élément du début de la file d'attente

is_empty()

Retourne si la file d'attente est vide ou non

N'est-ce pas ennuyeux pour vous ? Je parle des sujets conceptuels

Pour moi, oui !

Mais nous ne pouvons rien faire sans connaître les concepts. Nous devons les connaître complètement avant de les mettre en œuvre. Ne vous inquiétez pas, il est temps de se salir les mains avec du code

Je suppose que vous avez installé Python sur votre PC ; si ce n'est pas le cas, vous pouvez également essayer le compilateur en ligne

Mise en œuvre de la file d'attente

L'implémentation d'une file d'attente ne prendra pas plus de 15 minutes à un programmeur. Une fois que vous aurez appris, vous le direz. Peut-être pourrez-vous l'implémenter en quelques minutes après ce tutoriel

Il y a plusieurs façons d'implémenter un fichier d'attente en Python. Voyons les différentes implémentations de file d'attente étape par étape

#1. Liste

La liste est un type de données intégré à Python. Nous allons utiliser ce type de données pour implémenter une fichier d'attente dans une classe. Nous allons vous guider à travers différentes étapes pour mettre en œuvre la structure de données de la file d'attente à partir de zéro sans aucun module. Nous allons donc nous y mettre

Étape 1

Écrivez une classe appelée File d'attente

classe Queue :
pass

Étape 2

Il doit y avoir une variable pour stocker les données de la file d'attente dans la classe. Appelons-la éléments. Et c'est une liste bien sûr

class Queue :

def __init__(self) :
self.elements = []

Étape 3

Pour insérer des données dans la file d'attente, nous avons besoin d'une méthode dans la classe. Cette méthode s'appelle enqueue , comme nous l'avons déjà vu dans la section précédente du tutoriel

La méthode prend des données et les ajoute à la file d'attente (éléments). Nous pouvons utiliser la méthode ajouter du type de données list pour ajouter des données à la fin de la file d'attente

class Queue :

# ...

def enqueue(self, data) :
self.elements.append(data)
return data

Étape 4

La file d'attente doit avoir une sortie. Et cela s'appelle dequeue. Je pense que vous avez déjà deviné que nous allons utiliser la méthode pop du type de données list. Si vous avez deviné ou non, bravo!

La méthode pop du type de données list supprime un élément de la liste à l'index donné. Si nous n'avons pas donné d'index, elle supprime le dernier élément de la liste

Ici, nous devons supprimer le premier élément de la liste. Nous devons donc passer l'index 0 à la méthode pop

class Queue :

# ...

def dequeue(self) :
return self.elements.pop(0)

C'est suffisant pour un fichier d'attente. Mais nous avons besoin de fonctions d'aide pour tester si les opérations de la file d'attente fonctionnent correctement ou non. Ecrivons également les fonctions d'aide

Étape 5

La méthode arrière() est utilisée pour obtenir le dernier élément de la file d'attente. L'indexation négative dans le type de données liste nous aide à obtenir le dernier élément de la file d'attente

class Queue :

# ...

def rear(self) :
return self.elements[-1]

Étape 6

La méthode front() est utilisée pour obtenir le premier élément de la fiche d'attente. Nous pouvons obtenir le premier élément de la file d'attente en utilisant l'index de la liste

class Queue :

# ...

def front(self) :
return self.elements<x>[0]</x>

Étape 7

La méthode is_empty() est utilisée pour vérifier si le fichier d'attente est vide ou non. Nous pouvons vérifier la longueur de la liste

class Queue :

# ...

def is_empty(self) :
return len(self.elements) == 0

Nous avons terminé la partie implémentation de la structure de données de la fichier d'attente . Nous devons créer un objet pour que la classe File d'attente puisse l'utiliser

C'est ce que nous allons faire

class Queue :

# ...

if __name__ == '__main__' :
queue = Queue()

Nous avons maintenant un objet File d'attente . Testons-le avec une série d'opérations

  • Vérifiez si le fichier d'attente est vide ou non en utilisant la méthode est_vide . Elle doit renvoyer True.
  • Ajoutez les nombres 1, 2, 3, 4, 5 à la fichier d'attente à l'aide de la méthode enqueue .
  • La méthode est_vide doit renvoyer Faux. Vérifiez-le.
  • Imprimez les éléments avant et arrière à l'aide des méthodes avant et arrière de l'entreprise.
  • Retirez l'élément de la file d'attente à l'aide de la méthode dequeue .
  • Vérifiez l'élément avant . Il doit renvoyer l'élément 2.
  • Retirez maintenant tous les éléments de la file d'attente.
  • La méthode est_vide doit renvoyer True. Vérifiez-le.

Je pense que c'est suffisant pour tester l'implémentation de notre fichier d'attente. Écrivez le code pour chaque étape mentionnée ci-dessus afin de tester la file d'attente

Avez-vous écrit le code ?

Non, ne vous inquiétez pas

Vérifiez le code ci-dessous

class Queue :

def __init__(self) :
self.elements = []

def enqueue(self, data) :
self.elements.append(data)
return data

def dequeue(self) :
return self.elements.pop(0)

def rear(self) :
return self.elements[-1]

def front(self) :
return self.elements<x>[0]</x>

def is_empty(self) :
return len(self.elements) == 0

if __name__ == '__main__' :
queue = Queue()

## vérification de la méthode is_empty -> True
print(queue.is_empty())

## ajout des éléments
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
queue.enqueue(4)
queue.enqueue(5)

## vérifiant à nouveau la méthode is_empty -> False
print(queue.is_empty())

## impression des éléments avant et arrière en utilisant respectivement les méthodes front et rear -> 1, 5
print(queue.front(), end=' ')
print(queue.rear())

## suppression de l'élément -> 1
queue.dequeue()

## vérification des éléments avant et arrière en utilisant respectivement les méthodes front et rear -> 2 5
print(queue.front(), end=' ')
print(queue.rear())

## suppression de tous les éléments
queue.dequeue()
queue.dequeue()
queue.dequeue()
queue.dequeue()

## vérification de la méthode is_empty pour la dernière fois -> True
print(queue.is_empty())

Je pense que vous avez exécuté le programme ci-dessus. Vous pouvez obtenir une sortie similaire au résultat suivant

True
False

1

5

2

5
True

Nous pouvons directement utiliser le type de données liste comme structure de données de fichier d'attente . L'implémentation ci-dessus de la file d'attente vous aide à mieux comprendre l'implémentation de la file d'attente dans d'autres langages de programmation

Vous pouvez également utiliser l'implémentation de la classe de fichier d'attente ci-dessus dans un autre programme d'un projet en créant simplement l'objet comme nous l'avons fait précédemment

Nous avons implémenté la fichier d'attente à partir de zéro en utilisant le type de données liste. Existe-t-il des modules intégrés pour la file d'attente ? Oui, nous avons des implémentations de file d'attente intégrées. Voyons-les

#2. deque from collections

Elle est implémentée comme une file d'attente à double extrémité. Puisqu'elle supporte l'ajout et le retrait d'éléments aux deux extrémités, nous pouvons l'utiliser comme une pile et une fichier d'attente. Voyons l'implémentation de la file d'attente à l'aide de dequeue

Elle est mise en œuvre à l'aide d'autres structures de données appelées listes doublement liées. Ainsi, les performances d'insertion et de suppression d'éléments sont cohérentes. L'accès aux éléments de la liste doublement liée prend O(n) temps. Nous pouvons l'utiliser comme une fichier d'attente car il n'est pas nécessaire d'accéder aux éléments du milieu à partir de la fichier d'attente

Examinons les différentes méthodes offertes par la fichier d'attente

  • append(data) - utilisée pour ajouter des données à la file d'attente
  • popleft() - permet de retirer le premier élément de la file d'attente

Il n'y a pas d'autres méthodes pour avant, arrière et est_vide. Nous pouvons imprimer toute la file d'attente à la place des méthodes avant et arrière . Ensuite, nous pouvons utiliser la méthode len pour vérifier si la fichier d'attente est vide ou non

Nous avons suivi une série d'étapes pour tester l'implémentation de la fichier d'attente dans la section précédente. Suivons la même série d'étapes ici aussi

from collections import deque

## création de l'objet deque
queue = deque()

## vérification si la queue est vide ou non -> True
print(len(queue) == 0)

## pousser les éléments
queue.append(1)
queue.append(2)
queue.append(3)
queue.append(4)
queue.append(5)

## vérifie à nouveau si la file est vide ou non -> False
print(len(queue) == 0)

## imprime la file
print(queue)

## supprime l'élément -> 1
queue.popleft()

## impression de la file d'attente
print(queue)

##

suppression de tous les éléments
queue.popleft()
queue.popleft()
queue.popleft()
queue.popleft()

##

vérification du fait que la file d'attente est vide ou non pour la dernière fois -> True
print(len(queue) == 0)

Vous obtiendrez un résultat similaire à la sortie suivante

True
False
deque([1, 2, 3, 4, 5])
deque([2, 3, 4, 5])
True

#3. File d'attente de la file d'attente

Python possède un module intégré appelé file d'attente qui utilise une classe appelée File d'attente pour l'implémentation de la file d'attente. Elle est similaire à celle que nous avons implémentée précédemment

Tout d'abord, vérifions les différentes méthodes de la classe File d'attente

  • put(data) - ajoute ou pousse les données dans la file d'attente
  • get() - retire le premier élément de la file d'attente et le renvoie
  • vide( ) - Indique si la pile est vide ou non
  • qsize( ) - renvoie la longueur de la file d'attente.

Implémentons le fichier d'attente avec les méthodes ci-dessus

from queue import Queue

## création de l'objet Queue
queue_object = Queue()

## vérification si la queue est vide ou non -> True
print(queue_object.empty())

## ajout des éléments
queue_object.put(1)
queue_object.put(2)
queue_object.put(3)
queue_object.put(4)
queue_object.put(5)

## vérifie à nouveau si la file est vide ou non -> False
print(queue_object.empty())

## suppression de tous les éléments
print(queue_object.get())
print(queue_object.get())
print(queue_object.get())

## vérification de la taille de la file d'attente
print("Size", queue_object.qsize())

print(queue_object.get())
print(queue_object.get())

##

vérification du fait que l'objet de la file d'attente est vide ou non pour la dernière fois -> True
print(queue_object.empty())

Vérifiez la sortie du code ci-dessus

True
False

1


2

3

Size 2

4


5

True

Il existe d'autres méthodes dans la classe File d'attente . Vous pouvez les explorer en utilisant la fonction intégrée dir

Conclusion

J'espère que vous avez appris à connaître la structure de données de la file d'attente et son implémentation. C'est tout pour la file d'attente. Vous pouvez utiliser le fichier d'attente à différents endroits où les données doivent être traitées dans l'ordre FIFO (premier entré/premier sorti) . Utilisez la fiche d'attente dans la résolution de problèmes chaque fois que vous en avez l'occasion

Vous souhaitez maîtriser Python ? Consultez ces ressources d'apprentissage

Bon codage 🙂 👨‍💻

  • Hafeezul Kareem Shaik
    Auteur
Merci à nos sponsors
D'autres lectures intéressantes sur le développement
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus