C3.1 : Les piles
Mise en évidence
1) Tester le petit jeu suivant : ranger les assiettes.
2) Donner l'interface d'une structure de données que l'on pourrait utiliser pour programmer ce jeu.
Les piles
Présentation
Les piles sont des structures de données dites linéaires (ou séquentielles), les données qu'elles contiennent sont ordonnées.
Les piles se caractérisent par le fait que les données qu'elles contiennent se manipulent en respectant le principe « dernier arrivé, premier sorti » (en anglais LIFO pour last in, first out). Autrement dit, les éléments sont ajoutés et enlevés du même côté.
Exemples
Dans un logiciel, la possibilité d'annuler les dernières actions est gérée à l'aide d'une pile.
Interface
L'interface minimale des piles permet les actions suivantes :
- - Créer une structure vide ;
- - Tester si la structure est vide ;
- - Ajouter un élément à la structure : empiler ;
- - Enlever (en renvoyant) un élément à la structure : dépiler.
Implémentation
Rappel : Comme toutes les structures de données, les piles peuvent être implémentées par des classes (ce que nous verrons dans cette activité), mais également à l'aide de fonctions...
Implémentation d'une classe Pile en Python
A faire :
1) Proposer une implémentation, en python, de l'interface minimale (constructeur, est_vide, empile et depile) d'une classe Pile basée sur l'utilisation d'un attribut de type list.
2) Compléter le programme principal de façon à vérifier le bon fonctionnement des différentes méthodes de la classe.
Application
Dans toute cette partie, on utilisera la classe Pile du III.
Application 1 : Manipulation des piles
On considère la situation A.
1) En utilisant les méthodes de la structure de données de type pile, proposer une suite d'opérations qui permet de passer de la situation A à la situation B.
2) Proposer une suite d'opérations qui permet de passer de la situation B à la situation C.
Application 2 : Création d'une pile avec les premiers entiers
1) Écrire une fonction cree_pile_1_n(n:int) ->Pile qui prend un nombre entier n en paramètre et renvoie une Pile contenant les nombres entiers empilées de 1 à n.
2) Compléter le programme principal pour vérifier le bon fonctionnement des deux fonctions.
Application 3 : Transfert des éléments d'une pile dans une autre pile
1) Écrire une fonction transfert_pile_a_pile(p1:Pile, p2:Pile)->Pile qui prend deux Piles en paramètres et transfert les éléments de la première dans la deuxième.
2) Compléter le programme principal pour vérifier le bon fonctionnement des deux fonctions.
Application 4 : Nombre d'éléments d'une pile
Écrire une fonction long(p:Pile)->int qui :
- - prend un objet instance de la classe Pile en paramètre ;
- - renvoie le nombre d'éléments de cette pile.
Remarque : cette fonction ne devra pas avoir d'effet de bords.