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