Piles, files
Les piles et les files sont deux structures de données qui permettent de stocker séquentiellement des valeurs. On distingue deux modes de stockage :
- LIFO (ou FILO) :: Last In First Out (ou First In Last Out). Il s'agit des piles : le dernier élément à être ajouté à la pile sera le premier élément à en être supprimé.
- FIFO :: First In First Out. Il s'agit des files : le premier élément à être ajouté à la file sera le premier élément à en être supprimé.
Dans chacun des cas ci-dessous, dire si la situation correspond à un mode de stockage LIFO ou FIFO.
-
des assiettes rangées dans un placard :
il s'agit du mode LIFO (la dernière assiette rangée sera la première assiette sortie)
-
des élèves faisant la queue à la cantine :
il s'agit du mode FIFO (le premier élève arrivé sera le premier élève servi)
Pile¶
On stocke les éléments selon le mode FILO. On ajoute et retire les éléments au sommet de la pile. Les éléments sont retirés d'une pile dans l'ordre inverse de leur ordre d'ajout.
On ne considère que le cas où les éléments sont des entiers.
L'interface du type Pile
est la suivante :
Notation fonction | Notation objet | Description |
---|---|---|
creer_pile_vide() -> Pile |
Pile() -> Pile |
Créer une pile vide |
est_pile_vide(p:Pile) -> bool |
p.est_vide() -> bool |
Détermine si la pile p est vide. |
empiler(p:Pile, c:int) -> None |
p.empiler(c:int) -> None |
Ajoute l'entier c au sommet de la pile p |
depiler(p:Pile) -> int |
p.depiler() -> int |
Renvoie l'entier au sommet de la pile p , lorsque cela est possible. |
affiche_pile(p:Pile) -> None |
p.affiche() -> None |
Affiche la pile p sans la modifier. |
Les opérations d'empilement et de dépilement modifient la pile à laquelle elles s'appliquent. On parle d'effet de bord. Une pile est un objet mutable.
-
La pile
p
est constituée des éléments1
,2
et3
(3
est au sommet de la pile. Donner le contenu dep2
après l'exécution du code suivant :1 2 3
p2 = Pile() while not p.est_vide(): p2.empiler(p.depiler())
p2
est la pile3
,2
,1
(1
est le sommet) -
Quel est l'affichage alors réalisé par le code
1 2
while not p2.est_vide(): print(p2.depiler())
Cela affiche
1
,2
,3
(dans cet ordre).
File¶
On stocke les éléments selon le mode FIFO. On ajoute en fin de file et on retire les éléments au début de la file. Les éléments sont retirés d'une file dans le même ordre que leur ordre d'ajout.
On ne considère que le cas où les éléments sont des entiers.
L'interface du type File
est la suivante :
Notation fonction | Notation objet | Description |
---|---|---|
creer_file_vide() -> File |
File() -> File |
Créer une file vide |
est_file_vide(f:File) -> bool |
f.est_vide() -> bool |
Détermine si la file f est vide. |
enfiler(f:File, c:int) -> None |
f.enfiler(c:int) -> None |
Ajoute l'entier c à la fin de la file f |
defiler(f:File) -> int |
f.defiler() -> int |
Renvoie l'entier au début de la file f , lorsque cela est possible. |
affiche_file(f:File) -> None |
f.affiche() -> None |
Affiche la file f sans la modifier. |
Les opérations d'enfilement et de défilement modifient la file à laquelle elles s'appliquent. On parle d'effet de bord. Une file est un objet mutable.
-
La file
f
est constituée des éléments1
,2
et3
(3
est à la fin de la file. Donner le contenu def2
après l'exécution du code suivant :1 2 3
f2 = File() while not f.est_vide(): f2.enfiler(f.defiler())
f2
est la file1
,2
,3
(3
est la fin de la file) -
Quel est l'affichage alors réalisé par le code
1 2
while not f2.est_vide(): print(f2.defiler())
Cela affiche
1
,2
,3
(dans cet ordre).
Implémentation¶
On implémente l'interface du type Pile
et du type File
à l'aide d'objets de type Maillon
.
Voir code correspondant écrit en TP.