Logo de kxs.frCours d'informatique pour le lycée et la prépa

Files

Présentation

En informatique, une file est une liste avec des restrictions. Cette fois-ci l'analogie est celle de la file d'attente. La première personne entrée est la première à sortir. Ainsi on ne pourra récupérer les éléments d'une file que dans l'ordre dans lequel ils sont entrés.

Ici, on peut insérer un nouvel élément seulement à l'entrée de la file et on peut retirer un élément uniquement à la sortie

Insere Retire

Interface

Définition

Voici donc les éléments les plus courants de l'interface d'un pile :

enfile(x)
insère un élément à l'entrée de la file ;

defile()
enlève l'élément en bout de file ;

sortie()
renvoie l'élément en sortie de file ;

taille()
renvoie le nombre d'éléments de la file ;

estVide()
renvoie True si la file est vide, False sinon ;

Exemple

1) Considérant la suite d'instructions suivante, donnez le contenu de la file à chaque ligne repérée par un numéro en commentaire. ma_file est initialement une file vide. On représentera une file par des éléments entre crochets comme en Python.

ma_file.enfile(2)
ma_file.enfile(3) #1
ma_file.enfile(5)
ma_file.enfile(7) #2
ma_file.defile()  #3
ma_file.sortie()  #4
ma_file.enfile(9)
ma_file.defile()  #5
#1 [2, 3]
#2 [2, 3, 5, 7]
#3 [3, 5, 7]
#4 3
#5 [5, 7, 9]

Implémentation

Comme avec les piles, il existe plusieurs façons d'implémenter une même interface. Vous allez créer deux implémentations de l'interface définie ci-dessus.

list Python

2) Complétez la classe FilePerso ci-dessous pour implémenter l'interface d'une file (enfile(x), defile(), sortie(), taille(), estVide())

class FilePerso:
    """File personalisée"""
    def __init__(self):
        self.liste = []

ma_file = FilePerso()
class FilePerso:
    """File personalisée"""
    def __init__(self):
        self.liste = []

    def enfile(self, x):
        self.liste.append(x)

    def defile(self):
        self.liste.pop(0)

    def sortie(self):
        return self.liste[0]

    def taille(self):
        return len(self.liste)

    def estVide(self):
        return self.liste == []

Deux piles

Il existe une façon particulière d'implémenter une file avec deux piles.

3) En réutilisant la classe Pile de la page précédente créez une nouvelle classe File. On utilisera deux piles : pilegauche et piledroite. Pour enfiler un élément, on l'empile dans pilegauche. Pour défiler un élément, on le dépile de piledroite. Mais si piledroite est vide, on dépile intégralement pilegauche dans piledroite avant de dépiler un élément de piledroite.

class File:
    def __init__(self):
        self.pilegauche = Pile()
        self.piledroite = Pile()

    def enfile(self, x):
        self.pilegauche.empile(x)

    def defile(self):
        if self.piledroite.estVide():
            while not self.pilegauche.estVide():
                e = self.pilegauche.sommet()
                self.pilegauche.depile()
                self.piledroite.empile(e)
        self.piledroite.depile()

Bilan

Les files sont basées sur le principe FIFO pour First In First Out, ce qui signifie « premier entré, premier sorti ». Comme pour les piles, quand on sera dans une telle situation, il faudra alors utiliser cette structure de données. Elle est utilisée par exemple pour envoyer des instructions à un processus. Les instruction sont traitées dans leur ordre d'arrivée.