Créer une file avec une liste doublement chaînée
Une file est une structure de données linéaire qui suit le principe FIFO (First In First Out). Cela signifie que le premier élément ajouté à la file sera le premier à en sortir. Nous allons implémenter une file en utilisant une liste doublement chaînée.
Définition de la classe Noeud
La première étape consiste à définir une classe pour les nœuds de la liste doublement chaînée. Chaque nœud contiendra une valeur, un pointeur vers le nœud suivant et un pointeur vers le nœud précédent.
class Noeud:
def __init__(self, valeur):
self.valeur = valeur
self.suivant = None
self.precedent = None
Définition de la classe File
Ensuite, nous définissons la classe File qui utilisera les nœuds pour gérer les éléments de la file.
class File:
def __init__(self):
self.tete = None
self.queue = None
def estVide(self):
return self.tete is None
def enfile(self, valeur):
nouveau_noeud = Noeud(valeur)
if self.estVide():
self.tete = nouveau noeud
self.queue = nouveau_noeud
else:
self.queue.suivant = nouveau_noeud
nouveau_noeud.precedent = self.queue
self.queue = nouveau_noeud
def defile(self):
valeur = self.tete.valeur
self.tete = self.tete.suivant
if self.tete is not None:
self.tete.precedent = None
else:
self.queue = None
return valeur
Exemple d'utilisation
Voici un exemple d'utilisation de la classe File :
maFile = File()
maFile.enfile(1)
maFile.enfile(2)
maFile.enfile(3)
print(maFile.defile()) # Affiche 1
print(maFile.defile()) # Affiche 2
print(maFile.defile()) # Affiche 3
À faire vous même
De la même façon qu'il y avait des schémas décrivant une pile fabriquée avec une liste simplement chaînée, réalisez les schémas qui expliquent le fonctionnement d'une file avec une liste doublement chaînée.
Remarque
Si pour les piles utiliser une classe ou un tableau ne change pas grand chose en terme de performance, pour une file il en va autrement. En effet, le fait de faire un insert au début de la liste python va réindexer tous les éléments, ce qui est une opération couteuse Vous pouvez faire le même exercice que pour la file : créer une classe avec des cellules et mesurer les temps d'éxécution.