Documente Academic
Documente Profesional
Documente Cultură
Courbis/c
Listes Chanes
IUT GTR Sophia-Antipolis
Carine.Courbis@sophia.inria.fr
Oct-Dec 2000
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
Plan
1] Introduction 2] Les Fonctions d'Allocation Dynamique de Mmoire 3] Les Listes Chanes
3.1] Insertion en Tte 3.2] Insertion en Queue 3.3] Insertion en Ordre
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
1] Introduction
Possible dallouer de la mmoire l'excution
(normalement la mmoire est alloue statiquement la compilation).
Intrts :
Gestion Optimale de la mmoire
Rservation d'une taille prcise de mmoire qd on en a besoin Libration de la mmoire qd on ne sen sert plus
Possibilit de dfinir des listes dlments de taille variable ( des tableaux qui sont de taille fixe)
Problme :
Les Pointeurs !!!
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
Chanage d'lments
Chaque lment possde l'Adresse de son Suivant (pointeur) Structure de donnes de Taille Variable Insertions/Suppressions d'lments se font par des Modifications de Chanage ( des dcalages en mmoire contigu comme dans les tableaux) Le Dernier Elment de la liste pointe sur une valeur particulire appele nil (en C, nil est reprsent par la constante NULL de la bibliothque <stdio.h>) not graphiquement
tete Double Chanage queue
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
tete
tete
"Haddock"
2 1
"Tournesol"
tete
"Tintin"
3 2
"Haddock"
1
"Tournesol"
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
1] Fait pointer le champ suiv de l'lment insrer sur l'lment point par tte i.e. p->suiv = tete;
p tete
"Tintin"
3
"Haddock"
2 1
"Tournesol"
p tete
"Tintin"
3
"Haddock"
2 1
"Tournesol"
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
tete
tete
"Tournesol"
1 2
"Haddock"
tete
"Tournesol" "Haddock"
1 2 3
"Tintin"
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
"Haddock"
"Tournesol"
1 2
"Haddock"
"Tintin"
3
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c
tete
"Tournesol"
1
tete
"Haddock"
2 1
"Tournesol"
tete
"Haddock"
2 3
"Tintin"
1
"Tournesol"
if (tete == NULL) ptr /* cas particulier si la tte est nil */ tete = p; "Haddock" "Tournesol" else { /*Recherche o insrer selon l'ordre*/ tete 2 1 if (strcmp(tete->nom, p->nom) >0){ /* insertion en tte */ p->suiv = tete; tete = p; "Haddock" ptr } else { "Tournesol" tete /* 1] Recherche le prcdent */ ptr = tete->suiv; 2 1 while ((ptr->suiv != NULL) && p 3 (strcmp(ptr->suiv->nom, p->nom)<0)) "Tintin" ptr = ptr->suiv; "Haddock" /* 2] Fait pointer suiv de l'lment insrer sur ptr lment point par le prcdent */ tete "Tournesol" p->suiv = ptr->suiv; 2 1 /* 3] Chane le suivant du prcdent avec l'lment insrer */ p 3 ptr->suiv = p; "Tintin" }}
http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c