Vous êtes sur la page 1sur 3

Cours : Structures de Données TD N° 3-partie 2: Les Listes Chaînées

TD N° 3-partie 2: Les Listes Chaînées


Exercice 1
Écrire une fonction qui permet de fusionner deux listes chaînées d’entiers triées par ordre
croissant en une troisième liste telle que celle-ci contienne les éléments de la liste1 et les
éléments de la liste2 triés par ordre croissant.

Exercice 2
On se propose de modéliser la gestion des patients dans un cabinet médical. Un patient est
caractérisé par: le nom, le prénom et un champ rdv (pour rendez-vous) de type entier
indiquant si le patient a un rendez-vous ou pas: 0 si le patient est sans rendez-vous, 1 si la
patient est avec rendez-vous.

Avant d’être consultés par le médecin, les patients sont entrés dans une salle d’attente qui sera
modélisée par une liste chaînée de patients. Une secrétaire fait entrer les patients ayant un
rdv=1 selon leur ordre d’arrivée, ensuite elle fait entrer les autres patients (ceux dont le rdv=0)
selon leur ordre d’arrivée aussi.

Définir la structure de données Patient.


Définir la structure de données Cellule.
Définir le type liste comme un pointeur sur la structure Cellule.

Dans une deuxième étape, on vous demande d’écrire les fonctions suivantes :
1. liste AjoutPatient ( liste tete, Patient P ) , qui permet d’ajouter un nouveau patient à
la fin de la liste identifiée par son pointeur tete.
2. void RendezVous ( liste tete, int *rdv, int *sansRdv ), qui compte et retourne le
nombre de patients avec reendez-vous, et le nombre de patients sans rendez-vous.
3. liste SupprimePatient ( list tete ) , qui permet de faire entrer un patient en
consultation. Cette opération est effectuée de la manière suivante : s’il n’y a aucun
patient avec rendez-vous alors c’est le premier patient de la liste qui est supprimé.
Sinon on supprime le premier patient qui a un rendez-vous.
4. void ConsulterSalleAttente ( liste tete ) , qui affiche tout d’abord les patients avec
rendez-vous, ensuite les patients sans rendez-vous.

Exercice 3 :
Dans un atelier les travaux soumis sont caractérisés par un Numéro (entier), un Code
Opération (chaine de caractères), et un Temps Opératoire (entier).
On se propose de représenter la liste des travaux sous forme d’une liste chaînée. Pour faciliter
l’exécution des travaux et minimiser le temps de préparation des machines. Les travaux de
même nature (possédant le même Code Opération) doivent se présenter en séquence (les uns
après les autres).
Questions :
1. Définir la structure de données Travail.
Définir la structure de données Cellule.
Définir le type liste comme un pointeur sur la structure Cellule.
(1pt)

Il s’agit de développer en C les fonctions de manipulation de la liste des travaux:

1/3
Cours : Structures de Données TD N° 3-partie 2: Les Listes Chaînées

2. liste creerListe ( liste L ): initialise la liste à vide (1pt)


3. liste ajouter ( liste L, Travail T ): Ajoute un travail à la liste des travaux. Si la liste
contient déjà des travaux de même nature, le travail doit être ajouté au début de la
séquence (2,5pts)
4. liste supprimerOp ( liste L,char CodeOp[] ): permet de supprimer le premier élément
d’une séquence de la liste des travaux. (2,5pts)
5. int chercherSequence ( liste L,char CodeOp[] ): permet de retourner le nombre total
des travaux dans la séquence qui a le code opératoire passer en paramètre. (1,5pts)
6. liste supprimerSequence ( liste L,char CodeOp[] ): permet de supprimer tous les
éléments d’une séquence de la liste des travaux. (1,5pts)

Exercices d'entraînement
Exercice 4 :
On considère une liste simplement chaînée dont les éléments sont des entiers.

Définir la structure de données Cellule.


Définir le type liste comme un pointeur sur la structure Cellule.

1- Écrire une fonction C ajouterElement (liste l, int x) , qui ajoute un entier x en tête de la
2- Écrire une fonction C initierListe(liste l, int n) , qui initialise la liste avec n entiers
saisie au clavier.
3- Écrire une fonction C supprimerElement (liste l, int x) , qui supprime toutes les
occurrences de la valeur x d’une liste l donnée sans changer l’ordre initial, et retourne
la nouvelle liste ainsi modifiée.
4- Écrire une fonction C eliminerToutDouble (liste l) , qui élimine toutes les répétitions
de tous les éléments de la liste l donnée sans changer l’ordre initial; cette fonction
retourne également la liste modifiée. Soit par exemple la liste suivante :

1 1 2 3 1 2

Le résultat devra être la liste suivante :

1 2 3

Exercice 5
On veut gérer à travers une liste chaînée un ensemble de livres. Pour chaque livre on garde le
titre et la quantité qui indique le nombre de copie disponible.

Faite la déclaration de la structure Livre et Cellule nécessaire pour notre liste puis répondre à
ces questions:

1. Écrire une fonction ajouterLivre qui ajoute un livre dans la liste:


• Si le livre a une quantité inférieur ou égale à 1 l'ajout sera en tête de liste.
• Si non, l'ajout sera en queue de liste.

2/3
Cours : Structures de Données TD N° 3-partie 2: Les Listes Chaînées

2. Écrire une fonction afficher qui affiche tout les Livres dans la liste.

3. Écrie une fonction supprimerVide qui supprime un livre de la liste:


• Le livre à supprimer est celui dont la quantité est égale à zéro.
• Si non, aucun livre ne sera supprimer.
4. Écrire une fonction calculerVide qui calcule et retourne le nombre de livres dans la liste
dont la quantité égale à zéro.
5. Écrire une fonction supprimerToutVide qui tout les livres dans la liste dont la quantité est
égale à zéro.

Tester les deux fonctions.

3/3

Vous aimerez peut-être aussi