TP n° 9 Liste Chaînée

Transcription

TP n° 9 Liste Chaînée
Université Paris 7 – Paris Diderot
L1 Sciences
IF2 : Structures de données et Objet JAVA
Année 2007 – 2008, 2ième semestre
TP n° 9
Liste Chaînée
On souhaite créer une liste d’étudiants identifiés par leur nom (une chaîne de caractères)
et leur numéro d’étudiant (un entier).
Exercice 1.
Pour cet exercice, nous allons construire une liste chaînée statique, à l’aide d’un tableau
de taille fixe (voir l’exemple dans la figure 1).
1. Créez une classe « etudiant » représentant un élément de la liste dont les trois attributs:
« nom », « numero », et « suivant » sont privés.
2. Écrivez le Constructeur par défaut qui initialisera la variable « nom » à une chaîne
vide, « numero » à 0, et « suivant » à -1.
3. Écrivez le Constructeur qui prend en argument une chaîne de caractères destinée à
l'initialisation du nom d'un étudiant et un entier destiné à l'initialisation de son numéro
étudiant. On initialise également le variable « suivant » à -1.
4. Créez une classe « classe » possédant 3 attributs privés:
liste_etudiants: un tableau de type etudiant
premier: un entier qui contiendra l’indice dans le tableau du premier élément
de la liste (c.à.d. la tête).
nombre_etudiants: un entier représentant le nombre d'éléments non nuls dans
liste_etudiants
Définissez également une constante TAILLE, de type entier, initialisée à 10 et
représentant la taille du tableau.
5. Écrivez le Constructeur par défaut pour cette classe qui initialisera les variables
« premier » à -1 et « nombre_etudiants » à 0.
6. Écrivez une méthode qui recherche un étudiant à partir de son numéro d’étudiant.
Cette méthode retourne l’indice dans le tableau où se trouve l’étudiant, ou « -1 » si on
ne le trouve pas.
7. Écrivez une méthode qui insère un nouvel étudiant dans la liste à partir de son nom et
de son numéro étudiant. On l’insère dans la première case disponible du tableau. On
1
suppose qu’au départ le tableau ne contient que des éléments vides, c.à.d. avec un
numéro d’étudiant égal à 0. Cette méthode retourne l’indice du tableau où le nouvel
étudiant a été inséré, ou « -1 » s’il n’y a plus de place. Ce nouveau élément devient
également la nouvelle tête de la liste.
8. Écrivez une méthode de suppression d’un étudiant de la liste à partir de son numéro
d’étudiant. Cette méthode renvoie l’indice de l’élément supprimé dans le tableau, ou
« -1 » s’il n’existe pas.
9. A l’aide des méthodes précédentes, écrivez un programme principal qui :
a. Initialise la liste,
b. Demande les noms et/ou les numéros de nouveaux étudiants, et les ajoute à la
liste s’ils n’y sont pas déjà, ou les supprime. Vous ferez de multiples
ajouts/suppressions successifs de façon à créer une liste contenant des
« trous », vous permettant ainsi de bien vérifier le comportement des méthodes
d’ajout et de suppression.
Exercice 2.
Pour cet exercice, nous allons construire une liste chaînée dynamique : chaque élément
de la liste pointe sur un autre élément sans l'aide d'un tableau. On suppose que la liste des
étudiants n’est pas triée.
1. Proposez une classe « Etudiant » représentant un élément de la liste.
2. Écrivez le Constructeur prendra en argument une chaîne de caractères destinée à
initialiser le nom d’un étudiant, et un entier destiné à initialiser un numéro étudiant.
3. Écrivez la classe « Classe » représentant une liste d'étudiants. Elle comprend 2
attributs privés:
nombre_Etudiants: type entier
tete: type Etudiant représentant la tête de la liste
4. Écrivez le Constructeur par défaut pour la classe « Classe » qui initialisera la variable
« tete » à NULL et nombre_Etudiants à 0.
5. Écrivez une méthode qui insère un nouvel élément en tête de liste et retourne la
nouvelle tête de liste.
6. Écrivez une méthode qui recherche un étudiant dans la liste à partir de son numéro, et
retourne l’élément correspondant, ou NULL s’il n’est pas présent.
7. Écrivez une méthode qui supprime un étudiant de la liste à partir de son numéro.
8. Écrivez le programme principal pour tester toutes vos méthodes.
Exercice 3 (pour les plus rapides !).
Pour cet exercice nous reprenons la liste de l’Exercice 2.
1. Proposez une modification de la structure de données en supposant que la liste est
doublement chaînée.
2. Triez la liste d'étudiants en ordre croissant par l'algorithme Insertion.
Quels sont les avantages de l’utilisation des listes chaînées dans ce cas par rapport à
l’utilisation des tableaux?
3. Récrivez la méthode d’insertion un nouveau étudiant de l’Exercice 2 pour que l'ordre
soit respecté.
4. Écrivez une méthode qui fusionne 2 listes triées Classe1 et Classe2 en une liste
Classe3 également triée. Cette méthode retourne la nouvelle liste Classe3.
2