Académique Documents
Professionnel Documents
Culture Documents
Chapitre 4 - Les Listes Simples - Partie2 - Suite
Chapitre 4 - Les Listes Simples - Partie2 - Suite
Rappel
Cellule = élément
de la liste
Une liste simplement chainée est caractérisée par l’adresse Le pointeur du dernier
(L) du premier élément qui s’appelle pointeur début élément doit pointer sur NIL
2
I. Rappel
Les éléments (cellules) d’une liste simple sont Une liste simplement chainée est une structure
éparpillés dans la mémoire mais reliés dynamique de taille variable car on peut lui
par des pointeurs ajouter et/ou supprimer des cellules
Chaque élément (cellule) de la liste est Si P est un pointeur sur cellule de la liste:
représenté par un enregistrement formé P→donnée ou *P.donnée désigne :
au moins de deux champs: La « donnée » de la cellule pointée par P
Champ 1 : donnée (entier, réel, …) P→suivant ou *P.suivant désigne :
Champ 2 : suivant (pointeur) L’adresse de la cellule qui suit la cellule pointée par P
3
I. Application
Sachant que chaque étudiant est caractérisé par les informations suivantes:
Champ Code Type
On désire gérer les
Numéro de carte d’identité cin entier étudiants d’une classe en
Nom et prénom np Chaine[30] utilisant une liste chainée
simple.
Moyenne générale mg réel
Questions:
1) Déclarer une liste chainée nommée L de type LS et l’initialiser à NIL après
avoir déclaré la structure cellule (étudiant) correspondante.
4
I. Application
Questions:
1) Déclarer une liste chainée nommée L de type LS et l’initialiser à NIL après
avoir déclaré la structure cellule (étudiant) correspondante.
Type
Etudiant = enregistrement
Cin:entier
Np: chaine[30]
Mg:réel
Suivant :Pointeur sur Etudiant
Fin
LS = Pointeur sur Etudiant
Var
L:LS
Début
// initialiser la liste à vide
L Nil
Fin L
5
I. Application
Questions:
2) Ecrire une fonction : Ajout_entete(L:LS):LS permettant de :
❑ saisir les données relatives à un étudiant
❑ ajouter l’étudiant en tête de liste
❑ retourner la nouvelle liste
6
I. Application
Questions:
2) Ecrire une fonction : Ajout_entete(L:LS):LS permettant de :
❑ saisir les données relatives à un étudiant
❑ ajouter l’étudiant en tête de liste
❑ retourner la nouvelle liste
Fonction Ajout_entete(L:LS):LS
Var
p:LS; a:entier; b:chaine[30]; c:réel
Début
//saisir les données d’un étudiant
Ecrire ("cin : ") ; Lire(a)
Ecrire ("nom et prénom : ") ; Lire(b)
Ecrire ("moyenne : ") ; Lire(c)
// ajouter l’étudiant au début de la liste
p=nouveau(Etudiant)
p→ cin a // *p.cin a
p→ np b // *p.np b
p→ mg c // *p.mg c
p→ suivant L // *p.suivant L
Lp
//retourner la nouvelle liste
retourner (L)
Fin
7
I. Application
Questions:
3) Ecrire une procédure afficher_liste(L:LS) permettant d’afficher les éléments de la liste.
Pour chaque étudiant afficher le nom et le prénom ainsi que la moyenne.
8
I. Application
Questions:
3) Ecrire une procédure afficher_liste(L:LS) permettant d’afficher les éléments de la liste.
Pour chaque etudiant afficher le nom et le prenom ainsi que la moyenne,
Procedure afficher_liste(L:LS)
Var
p:LS;
Début
//vérifier si la liste est vide
si (L=Nil) alors
Ecrire ("Liste Vide")
Sinon
pL
Tant que( p ≠ Nil) Faire
Ecrire (p→ np , " : " , p→mg)
p p→suivant
Fin Tanque
Finsi
Fin
9
I. Application
Questions:
4) Ecrire une fonction : Ajout_enqueue(L:LS):LS permettant de :
❑ saisir les données relatives à un étudiant
❑ ajouter l’étudiant à la fin de liste
❑ retourner la nouvelle liste
10
I. Application
Questions:
4) Ecrire une fonction : Ajout_enqueue(L:LS):LS permettant de :
❑ saisir les données relatives à un étudiant
❑ ajouter l’étudiant à la fin de liste
❑ retourner la nouvelle liste
Fonction Ajout_enqueue(L:LS):LS
Var Fonction dernier(L:LS) : LS
p:LS; Var p:LS
Début Début
p=nouveau(Etudiant) si(L=Nil) alors
//saisir les données d’un étudiant retourner Nil
Ecrire ("cin : ") ; Lire(p→ cin) Fin si
Ecrire ("nom et prénom : ") ; Lire(p→ np )
pL
Ecrire ("moyenne : ") ; Lire(p→ mg )
// ajouter l’étudiant à la fin de la liste
Tant que (p→suivant ≠ Nil) Faire
p→ suivant Nil p p→ suivant
si (L=NIL) alors Fin tant que
Lp Retourner p
Sinon Fin
q=dernier(L)
q→ suivantp
Fin si
//retourner la nouvelle liste
retourner (L)
Fin 11
I. Application
Questions:
4) Ecrire une fonction : Ajout_enqueue(L:LS):LS permettant de :
❑ saisir les données relatives à un étudiant
❑ ajouter l’étudiant à la fin de liste
❑ retourner la nouvelle liste
12
I. Application
Questions:
5) Ecrire une fonction : moy_classe(L:LS):réel permettant de :
❑ calculer la moyenne de la classe
13
I. Application
Questions:
5) Ecrire une fonction : moy_classe(L:LS):réel permettant de :
❑ calculer la moyenne de la classe
Fonction moy_classe(L:LS):réel
Var
p:LS; s:réel; nb:entier
Début
Si(L=Nil) alors
retourner 0
Fin si
pL ; nb0; s0
Tant que (p ≠ Nil) Faire
ss+p→mg
nbnb+1
p p→ suivant
Fin Tant que
retourner (s/nb)
Fin 14
I. Application
Questions:
6) Ecrire une fonction : max_liste(L:LS): réel permettant de :
❑ chercher la meilleure moyenne dans la liste
15
I. Application
Questions:
6) Ecrire une fonction : max_liste(L:LS): réel permettant de :
❑ chercher la meilleure moyenne dans la liste
Fonction max_classe(L:LS):réel
Var
p:LS; max:réel
Début
Si(L=Nil) alors
retourner 0
Fin si
max L→ mg
pL→suivant
Tant que (p ≠ Nil) Faire
Si(p→mg > max) alors
max p→mg
Fin si
P p→suivant
Fin Tant que
retourner (max)
Fin 16
I. Application
Questions:
7) Ecrire une fonction : supprimer_tete(L:LS): réel permettant de :
❑ supprimer le premier étudiant de la liste
17
I. Application
Questions:
7) Ecrire une fonction : supprimer_tete(L:LS): réel permettant de :
❑ supprimer le premier etudiant de la liste
18
I. Application
Questions:
7) Ecrire une fonction : supprimer_tete(L:LS): réel permettant de :
❑ supprimer le premier étudiant de la liste
Fonction supprimer_tete(L:LS):LS
Var
p:LS;
Début
Si(L=Nil) alors
retourner Nil
Fin si
p L
LL→suivant
Libérer(p)
retourner (L)
Fin
19
I. Application
Questions:
8) Ecrire une fonction : supprimer_queue(L:LS): réel permettant de :
❑ supprimer le dernier étudiant de la liste
20
I. Application
Fonction avant_dernier(L:LS) : LS
Questions: Var p:LS
8) Ecrire une fonction : supprimer_queue(L:LS):
Début réel permettant de :
❑ si(L=Nil) alors
supprimer le dernier etudiant de la liste
retourner Nil
Fin si
Fonction supprimer_queue(L:LS):LS pL
Tant que (p→suivant→suivant ≠ Nil) faire
Var
pp→suivant
p:LS; Fin tant que
Début Si liste vide Retourner p
Si(L=Nil) alors Fin
retourner Nil
Fin si Si liste contient un seul élément
Si (L→suivant=Nil) alors
qL ; LNil ; libérer(q) ; retourner(L)
Fin si
Si liste contient plusieurs éléments
qavant_dernier(L)
Libérer(q→suivant)
q→suivant Nil
retourner (L)
Fin 21
I. Application
Questions:
8) Ecrire une fonction : supprimer_queue(L:LS): réel permettant de :
❑ supprimer le dernier étudiant de la liste
Fonction supprimer_queue(L:LS):LS
Var
p:LS;
Début
Si(L=Nil) alors
retourner Nil
Fin si
Si (L→suivant=Nil) alors
qL ; LNil ; libérer(q) ; retourner(L)
Fin si
qavant_dernier(L)
Libérer(q→suivant)
q→suivant Nil
retourner (L)
Fin 22
I. Application
Questions:
9) Ecrire une fonction : recherche_etudiant(x: entier, L:LS): LS permettant de :
❑ Vérifier l’existence d’un étudiant connaissant son numéro cin (x) dans la liste L
et qui retourne son adresse (pointeur) s’il existe, sinon Nil.
23
I. Application
Questions:
9) Ecrire une fonction : recherche_etudiant(x: entier, L:LS): LS permettant de :
❑ Vérifier l’existence d’un étudiant connaissant son numéro cin (x) dans la liste L
et qui retourne son adresse (pointeur) s’il existe, sinon Nil.
26
I. Application
Questions:
10) Ecrire une fonction : nombre_etudiant(L:LS): entier permettant de :
❑ Calculer le nombre d’étudiants de la classe.
27
I. Application
Questions:
10) Ecrire une fonction : nombre_etudiant(L:LS): entier permettant de :
❑ Calculer le nombre d’étudiants de la classe.
28