N7 1IMA
TECHNOLOGIE OBJET
TP 8
07/03/2016 (Séance TP 6)
Implantation chaînée d’une structure de donnée
générique
Une pile est une structure de données contenant des données de même type. Le principe
d’une pile est que le dernier élément ajouté est le premier à en être retiré. Si on considère une
pile d’assiettes, on pose une nouvelle assiette au sommet de la pile. Si on prend une assiette,
c’est naturellement celle du sommet de la pile. On dit que la pile est une structure de données
de type LIFO (Last In, First Out : dernier entré, premier sorti). Les opérations classiques sur une
pile sont les suivantes :
empiler un nouvel élément dans une pile ;
dépiler une pile (supprimer le dernier élément ajouté dans la pile) ;
accéder à l’élément en sommet de pile ;
savoir si une pile est vide ou non.
L’interface Pile, listing 1, spécifie une pile de chaînes de caractères. L’objectif des exercices
suivants est de proposer des réalisations de cette pile et d’autres classes qui utilisent la pile.
Listing 1 – La spécification d’une pile
1/** Définit la structure de données Pile.
2*@author Xavier Crégut
3*/
4public interface Pile {
5
6/** Savoir si la pile est vide.
7*@return vrai si la pile est vide
8*/
9//@ pure
10 boolean estVide();
11
12 /** Obtenir l’élément en sommet de la pile.
13 *@return l’élément en sommet de pile
14 */
15 //@ requires ! this.estVide();
16 //@ pure
17 String sommet();
18
19 /** Ajouter un élément au sommet de la pile.
20 *@param x élément à empiler
21 */
22 //@ ensures this.sommet() == x;
23 void empiler(String x);
24
25 /** Supprimer l’élément en sommet de la pile. */
26 //@ requires ! this.estVide() ;
27 void depiler();
28
29 }
TP 8 1/2
TECHNOLOGIE OBJET Implantation chaînée d’une structure de donnée générique
Exercice 1 : Réalisation chaînée
Intéressons nous à une réalisation de la pile qui s’appuie sur la classe Cellule pour chaîner
entre eux les éléments. L’objectif est d’écrire efficacement chacune des opérations pour qu’elles
s’exécutent en temps constant.
1.1 Indiquer comment chaîner les éléments entre eux pour que toutes les opérations s’exécutent
en temps constant. On pourra considérer l’exemple d’une pile vide dans laquelle on ajoute suc-
cessivement les éléments "a" puis "c" puis "b" et dont on dépile ensuite les éléments un à un.
1.2 Dessiner le diagramme de classe qui fait apparaître l’interface Pile, la réalisation PileChai-
nee et la classe Cellule.
1.3 Compléter la classe PileChainee qui est une réalisation de la pile s’appuyant sur l’organi-
sation précédente des cellules.
1.4 Tester la réalisation PileChainee en utilisant le programme de test fourni (PileChaineeTest).
Exercice 2 : Rendre les piles génériques
Une structure de données fonctionne de la même manière quel que soit le type des éléments
qu’elle est destinée à contenir. Pour éviter d’avoir à écrire plusieurs versions de la structure de
données et garder le contrôle de type, Java propose de paramétrer une interface, une classe ou
une méthode par un ou plusieurs types. C’est la généricité.
2.1 Modifier les types Pile (et autres classes) pour les rendre génériques. La classe de test devra
continuer à fonctionner.
2.2 Écrire un programme qui utilise une pile d’entiers, une pile de chaînes de caractères et une
pile de couleurs (java.awt.Color).
Exercice 3 : Symboles bien appairés
Écrire une méthode qui prend en paramètre une chaîne de caractères et vérifie que les paren-
thèses, crochets, accolades qu’elle contient sont appairés 1(la chaîne est bien "parenthésée"). Il
sera certainement utile de consulter la documentation de la classe String.
Objectifs
Structures chaînées en Java
Mise en œuvre de la généricité
1. On parle de langage de Dyck.
TP 8 2/2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !