Implantation chaînée d`une structure de donnée générique

publicité
TP 8
N7 1IMA
T ECHNOLOGIE O BJET
09/03/2015, 11/03/2015, 13/03/2015 (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 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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
TP 8
/** Définit la structure de données Pile.
* @author Xavier Crégut
*/
public interface Pile {
/** Savoir si la pile est vide.
* @return vrai si la pile est vide
*/
//@ pure
boolean estVide();
/** Obtenir l’élément en sommet de la pile.
* @return l’élément en sommet de pile
*/
//@ requires ! this.estVide();
//@ pure
String sommet();
/** Ajouter un élément au sommet de la pile.
* @param x élément à empiler
*/
//@ ensures this.sommet() == x;
void empiler(String x);
/** Supprimer l’élément en sommet de la pile. */
//@ requires ! this.estVide() ;
void depiler();
}
1/2
T ECHNOLOGIE O BJET
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 successivement 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 PileChainee et la classe Cellule.
1.3 Compléter la classe PileChainee qui est une réalisation de la pile s’appuyant sur l’organisation 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 parenthè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
Téléchargement