Académique Documents
Professionnel Documents
Culture Documents
Chaque élément possède un successeur sauf la queue (son successeur est la valeur NULL).
5 2 -25 7 ...... 2
La notation linéaire [5, 2, -25, 7, ..., 2] représentera la liste qui contient cette séquence.
Les structures de données linéaires induisent une notion de séquence entre les éléments (1er, 2ème, 3ème, suivant, dernier, …).
a) Inconvénients
L’utilisation de tableaux possède quelques inconvénients :
Ø PBM1 : La dimension d’un tableau doit être définie lors des déclarations et ne peut donc pas être
M. bada 1
Chapitre 3 : les listes Université de Batna 2 Algorithmique et structures de données
modifié
o Solution : définir un tableau dont la taille sera suffisante pour accueillir le plus grand nombre
d’éléments
§ PBM2 : gaspillage d’espace mémoire au cas des petites listes.
§ PBM3 : si la taille maximum venait à être augmentée è il faudrait modifier le
programme et le recompiler
Ø Lorsqu’on veut retirer (ou insérer) un élément du tableau « en début », il est nécessaire de décaler tous
les éléments situés après l’élément supprimé.
b) Avantages :
Ses éléments de même type sont dispersés dans la mémoire et reliés entre eux par des pointeurs.
• Un élément ou maillon d’une liste est toujours une structure (Objet composé) avec deux ou plusieurs
champs :
o Un ou plusieurs champ = Valeur : contenant l’information
o Un champ = Adresse : donnant l’adresse du prochain élément.
La liste est accessible uniquement par sa tête de liste c’est-à-dire son premier élément.
3.2.1. Structure d’un élément : Un élément de la liste est une structure de donnée définie comme suite :
Apres la déclaration de la structure élément, on peut créer des élément dynamiques en utilisant les pointeurs :
M. bada 2
Chapitre 3 : les listes Université de Batna 2 Algorithmique et structures de données
(*e).champ1 (*e).suivant
e ou ou
e->champ1 e->suivant
#100
Champ1 ... ChampN Suivant
*e
La déclaration d’un tableau T de N éléments en C mène à la création de N+1 variables : T[0], T[1], ...,T[N-1] et T.
En quelque sorte, on peut dire que le tableau dans un programme n’est que l’adresse de la 1ere case = &T[0].
Comme pour les tableaux, une liste n’est que l’adresse du premier élément (Tête) de la liste.
a) Liste vide :
Une liste est dite vide si elle ne contient aucun élément. En d’autre terme, une liste vide est un pointeur qui
est égale à NULL.
Ex :
Un étudiant est définie par les champs suivant : N, Nom
Supposons qu’on a une liste d’étudiants déjà créée, dont la queue pointe vers null.
#100
M. bada 3
Chapitre 3 : les listes Université de Batna 2 Algorithmique et structures de données
Liste Position
#100 #100
*position
#50 #200
(*position).suivant
M. bada 4
Chapitre 3 : les listes Université de Batna 2 Algorithmique et structures de données
Liste Position
#100 #50
*position
#50 #200
(*position).suivant
Position
Liste
#50
#100
Position
Liste
NULL
#100
M. bada 5
Chapitre 3 : les listes Université de Batna 2 Algorithmique et structures de données
Liste
#100
#700
10 ‘’NV’’ NULL
Liste
Position
#100
#200
2 ‘’...’’ #700
3 ‘’aa’’ #50 6 ‘’...’’ #200
e
#700
10 ‘’NV’’ NULL
Etudiant* e ;
e= (Etudiant*) = malloc (sizeof (Etudiant) ) ;
M. bada 6
Chapitre 3 : les listes Université de Batna 2 Algorithmique et structures de données
Etape 3 : parcourir la liste jusqu'à le dernier élément (position -> pointe le dernier élément « la
Queue » et pas NULL !!! ) è donc il faut faire avancer le pointeur position jusqu'à que son suivant
= NULL.
Etudiant* position ;
position= liste ;
while ( (*position).suivant != NULL )
{
position = (*position).suivant ;
}
(*position).suivant = e ;
#700
2 ‘’...’’ NULL
3 ‘’aa’’ #50 6 ‘’...’’ #200
2
#100 #50 #200
e 1
#700
10 ‘’NV’’ #100
*e
Etape1 : création dynamique d’un nouvel élément (utilisation des pointeurs) + initialisation :
Etudiant* e ;
e= (Etudiant*) = malloc (sizeof (Etudiant) ) ;
(*e).suivant = liste ;
M. bada 7
Chapitre 3 : les listes Université de Batna 2 Algorithmique et structures de données
Liste = e ;
Directe : dans ce cas on va utiliser directement une variable « place » qui donne la position où l’on doit
insérer le nouvel élément.
Indirecte : dans ce cas, il faut trouver un élément particulier « ex : l’étudiant Mohammed » à partir du
quel on déterminera la position du nouvel élément : (avant ou après).
Etape1 : création dynamique d’un nouvel élément (utilisation des pointeurs) + initialisation
Etudiant* e ;
e= (Etudiant*) = malloc (sizeof (Etudiant) ) ;
Etudiant* position ;
position= liste ;
int i=0 ;
while ( i < K-2 )
{
position = (*position). suivant ;
i=i+1 ;
}
(*e).suivant = (*position).suivant ;
M. bada 8
Chapitre 3 : les listes Université de Batna 2 Algorithmique et structures de données
(*position).suivant = e ;
2
Position
E1 E2 E3 E4 E5 NULL
Tête
4 3
Remarque : attention d’inverser les étapes 3 et 4, car ceci mène a perdre la 2eme partie de la liste
M. bada 9