Vous êtes sur la page 1sur 29

I.

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
Lp
//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
pL
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 )
pL
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
Lp Retourner p
Sinon Fin
q=dernier(L)
q→ suivantp
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
pL ; nb0; s0
Tant que (p ≠ Nil) Faire
ss+p→mg
nbnb+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
pL→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

Fonction supprimer_tete(L:LS):LS Fonction supprimer_tete(L:LS) : LS


Var Var p:LS
p:LS; Début
Début si(L=Nil) alors
Si(L=Nil) alors retourner Nil
retourner Nil Fin si
Fin si pL→suivant
libérer(L)
p L
Retourner p
LL→suivant Fin
Libérer(p)
retourner (L)
Fin

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
LL→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 pL
Tant que (p→suivant→suivant ≠ Nil) faire
Var
pp→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
qL ; LNil ; libérer(q) ; retourner(L)
Fin si
Si liste contient plusieurs éléments
qavant_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
qL ; LNil ; libérer(q) ; retourner(L)
Fin si

qavant_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.

Fonction recherche_etudiant(x:entier , L:LS):LS


Var
p:LS;
Début
Si(L=Nil) alors
retourner Nil
Fin si
pL
Tant que (p≠Nil) faire
si(p→cin =x) alors
retourner (p)
sinon
pp→suivant
fin si
Fin tant que
retourner (Nil)
Fin
24
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.

Fonction recherche_etudiant(x:entier , L:LS):LS


Var
p:LS;
Début
Si(L=Nil) alors
retourner Nil
Fin si
pL
Tant que (p≠Nil) faire
si(p→cin =x) alors
retourner (p)
sinon
pp→suivant
fin si
Fin tant que
retourner (Nil)
Fin
25
I. Application
Questions:
10) Ecrire une fonction : nombre_etudiant(L:LS): entier permettant de :
❑ Calculer le nombre d’étudiants de la classe.

26
I. Application
Questions:
10) Ecrire une fonction : nombre_etudiant(L:LS): entier permettant de :
❑ Calculer le nombre d’étudiants de la classe.

Fonction nombre_etudiant( L:LS):entier


Var
p:LS; nb:entier
Début
Si(L=Nil) alors
retourner 0
Fin si
pL ; nb0
Tant que (p≠Nil) faire
nbnb+1
pp→suivant
Fin tant que
retourner (nb)
Fin

27
I. Application
Questions:
10) Ecrire une fonction : nombre_etudiant(L:LS): entier permettant de :
❑ Calculer le nombre d’étudiants de la classe.

Fonction nombre_etudiant( L:LS):entier


Var
p:LS; nb:entier
Début
Si(L=Nil) alors
retourner 0
Fin si
pL ; nb0
Tant que (p≠Nil) faire
nbnb+1
pp→suivant
Fin tant que
retourner (nb)
Fin

28

Vous aimerez peut-être aussi