Vous êtes sur la page 1sur 2

FSTT - Filière Ingénieur LSI2- Licence GI

TD3

1) La Pile
Une pile est une structure de données dynamique permettant de stocker un ensemble de
données. On peut donc insérer un élément ou en supprimer un, à ceci près que l'on ne peut pas
choisir l'élément que l'on supprime : c'est le dernier élément inséré. L'ordre dans lequel les
éléments sont supprimés est donc inverse de celui dans lequel ils sont insérés (Last In First
Out). Une bonne image de cette structure de données est la pile d'assiettes : on peut rajouter
une assiette sur une pile d'assiettes mais on ne peut retirer que celle du dessus sans risquer de
tout casser.
L'opération d'insertion dans une pile est généralement appelée Empiler. L'opération de
suppression est souvent appelée Dépiler. Nous allons mettre en oeuvre la structure de pile à
l'aide d'un tableau.
a) On définie la pile par une classe Pile avec deux champs : un entier sommet représentant le
sommet de la pile et un tableau d’entiers représentant le contenu de la pile et un nom
descriptif de la pile.
Ecrire en java cette classe avec les constructeurs et les deux fonctions membres :
empiler (réel
(réel x) et réel dépiler ( ) implémentant les deux opérations d’insertion et de suppression.

b) Ecrire un programme utilisant cette classe

2) Algorithme des tours de Hanoi


Le but de cet exercice est de résoudre le problème des tours de Hanoï en utilisant un
algorithme récursif. Rappelons d'abord le principe de ce jeu.
N disques de diamètres deux à deux différents sont initialement enfilés sur une « tige de
gauche ». Ils sont disposés de telle sorte que leurs diamètres décroissent de la base de la tige
vers le sommet de la tige (voir figure 1). Le but du jeu est de déplacer ces N disques vers une
« tige de droite » en se servant d'une « tige du milieu », et en respectant les règles suivantes :
1. seul un disque peut être déplacé à la fois ;
2. un disque ne doit jamais être placé sur un disque de diamètre plus petit ;
3. chaque disque doit à tout moment se trouver sur une tige.
La solution de ce problème peut s'écrire très simplement sous forme récursive. En effet, on
peut en proposer la solution suivante :
1. déplacer les N - 1 disques du haut de la tige de gauche vers la tige du milieu en utilisant la
tige de droite comme tige intermédiaire ;
2. déplacer le dernier disque de la tige de gauche vers la tige de droite ;
déplacer les N - 1 disques de la tige du milieu vers la tige de droite en utilisant la tige de
gauche comme tige intermédiaire.

L’algorithme s’écrit alors


Deplace (SRC, DST, AUX, N)
DEBUT
si N=0, sortir
Deplace (SRC, AUX, DST, N-1)
DeplaceUnDisque (SRC, DST)
Deplace (AUX, DST, SRC, N-1)
FIN

a) Déroulez le fonctionnement de cet algorithme pour N = 3.


b) Ecrire la fonction récursive qui implémente cet algorithme en représentant les
tours par des piles et les disques par des nombres.
c) Ecrire le programme qui illustre sur un exemple cet algorithme

Figure: Tours de Hanoï. Les disques sont numérotés de 1 à N(ici, N = 5), du plus petit au plus grand.