Définition des listes généralisées
Définition des listes généralisées (1/2) (1/2)
Selon le Dictionnaire de l Selon le Dictionnaire de l’ ’informatique informatique de Larousse de Larousse, une liste se d , une liste se dé éfinit finit comme suit :
comme suit :
Ensemble de donné Ensemble de donn ées reli es reli ées par une partie lien, qui permet d é es par une partie lien, qui permet d’é ’établir un chemin tablir un chemin pour passer de l
pour passer de l’ ’une une à à l’ l ’autre. autre.
Ainsi, une liste correspond à Ainsi, une liste correspond à une collection de donné une collection de donn ées reli es relié ées entre elles. es entre elles.
Cette collection est essentiellement constitu Cette collection est essentiellement constitu é é e de n e de n groupes de m groupes de m donné donn é es. es.
On dit aussi que la liste poss
On dit aussi que la liste poss è è de de n n enregistrements de m enregistrements de m donné donn ées chacun. es chacun.
Liste d’appartements à louer
Type maison Duplexe
Nbr. pieces 7 ½
Chauffé Non
Cartier Rosemont
Garage inclu Non
Meublé Non
Cours inclu Non
Prix mensuel 900 $
Étage 3ième
Type maison Duplexe
Nbr. pieces 3 ½
Chauffé Non
Cartier Rosemont
Garage inclu Oui
Meublé Non
Cours inclu Oui
Prix mensuel 650 $
Étage 1ier
Type maison Triplexe
Nbr. pieces 4 ½
Chauffé Non
Cartier Verdun
Garage inclu Non
Meublé Non
Cours inclu Non
Prix mensuel 550 $
Étage 2ième
Type maison Maison
Nbr. pieces 10 ½
Chauffé Non
Cartier Outremont
Garage inclu Oui
Meublé Oui
Cours inclu Oui
Prix mensuel 2200 $
Étage 1ier - 2ième
Type maison Triplexe
Nbr. pieces 6 ½
Chauffé Non
Cartier Petite-Patrie
Garage inclu Non
Meublé Non
Cours inclu Non
Prix mensuel 750 $
Étage 1ier
9 d o n n ée s par enregist re m e nt
1 enregistrement
Définition des listes généralisées
Définition des listes généralisées (2/2) (2/2)
Les listes sont certainement les TDA Les listes sont certainement les TDA les les plus utilis plus utilis é é es. es.
Les listes les plus simples contiennent seulement Les listes les plus simples contiennent seulement quelques donn
quelques donn é é es par enregistrement. es par enregistrement.
Lorsqu Lorsqu ’ ’ on parle de listes g on parle de listes g é é n n é é ralis ralis é é es, on fait r es, on fait r é é f f é é rence rence au fait que chaque enregistrement de ces listes peut
au fait que chaque enregistrement de ces listes peut contenir d
contenir d ’ ’ autres listes parmi ses donn autres listes parmi ses donn é é es es (cette dé (cette d éfinition finition peut être appliqu
peut être appliqu ée r é e ré écursivement pour chacune des sous liste) cursivement pour chacune des sous liste) . .
Un exemple : Une liste d’épicerie!
Un exemple : Une liste d’épicerie! (1/4) (1/4)
Pour Pour é é laborer la notion d laborer la notion d ’ ’ un type de donn un type de donn é é es abstrait, es abstrait, consid
consid é é rer la liste de provision suivante : rer la liste de provision suivante :
lait; lait;
pain; pain;
oeufs; oeufs;
beurre; beurre;
confiture; confiture;
croissants; croissants;
pommes; pommes;
bananes. bananes.
Les Les é é l l é é ments de la liste sont dans un ordre s ments de la liste sont dans un ordre s é é quentiel quentiel mais ne sont pas n
mais ne sont pas n é é cessairement ordonn cessairement ordonn és par nom. é s par nom.
Un exemple : Une liste d’épicerie!
Un exemple : Une liste d’épicerie! (2/4) (2/4)
Que peut Que peut - - on faire avec une telle liste ? on faire avec une telle liste ?
(Quels sont les services qui peuvent être d
(Quels sont les services qui peuvent être d é é finit?) finit?)
cré cr éer la liste; er la liste;
ajouter un article dans la liste; ajouter un article dans la liste;
retirer un article de la liste; retirer un article de la liste;
calculer la longueur de la liste (le nombre d’ calculer la longueur de la liste (le nombre d ’ articles dans la liste); articles dans la liste);
retrouver l’ retrouver l ’article de la position i. article de la position i.
Quelle donn Quelle donn é é es sont n es sont n é é cessaires aux diff cessaires aux diff é é rents rents enregistrements de la liste?
enregistrements de la liste?
un nom d un nom d ’ ’ article. article.
Ainsi, on vient de d Ainsi, on vient de d é é finir un type de donn finir un type de donn é é es abstrait es abstrait nomm nomm é é « « liste de provisions liste de provisions » » comme une collection comme une collection d d ’é ’é l l é é ments de provisions jointes à ments de provisions jointes à l’ l ’ensemble ensemble
d d ’ ’ op op é é rations pr rations pr é é d d é é finis. finis.
Un exemple : Une liste d’épicerie!
Un exemple : Une liste d’épicerie! (3/4) (3/4)
Dé D éfinition des op finition des opé érations : rations :
Create Create : Cré : Cr ée et fait l e et fait l’ ’initialisation de la liste initialisation de la liste
(à(à vide)vide) Insert : Insè Insert : Ins ère un nouvel enregistrement dans la liste re un nouvel enregistrement dans la liste
Delete Delete : Supprime un enregistrement spé : Supprime un enregistrement sp écifique de la liste cifique de la liste
Retrieve Retrieve : Retrouve un enregistrement spé : Retrouve un enregistrement sp écifique de la liste et retourne cifique de la liste et retourne son contenu
son contenu
Length Length : Retourne le nombre d’ : Retourne le nombre d ’enregistrements pr enregistrements pré ésents dans la liste sents dans la liste
Les sp Les sp écifications de ces 5 op é cifications de ces 5 opé érations sont les termes de contrat rations sont les termes de contrat pour cette liste.
pour cette liste.
Qu’ Qu ’ est est -ce que la d - ce que la dé éfinition finition ci ci- -haut haut peut nous dire sur son peut nous dire sur son comportement :
comportement :
les fonctions : Create les fonctions : Create, Insert et , Insert et Delete Delete modifient le contenu de la liste. modifient le contenu de la liste.
les fonctions : Retrieve les fonctions : Retrieve et Length et Length questionnent la liste et retourne des questionnent la liste et retourne des informations sur elle.
informations sur elle.
Un exemple : Une liste d’épicerie!
Un exemple : Une liste d’épicerie! (4/4) (4/4)
Un TDA ne doit pas inclure les probl Un TDA ne doit pas inclure les probl é é matiques de matiques de l l ’ ’ impl impl é é mentation. Par exemple, on veut cré mentation. Par exemple, on veut cr é er la liste er la liste
suivante : suivante :
On utilise alors le pseudo On utilise alors le pseudo- -code code suivant : suivant :
Create(List)
Insert(List, Lait) Insert(List, Pain) Insert(List, Oeufs) Insert(List, Beurre) Insert(List, Confiture) Insert(List, Fruits)
Lait Pain Oeufs Beurre Confiture Fruits
List
Exemples d’implémentation de liste
Exemples d’implémentation de liste (1/3) (1/3)
Liste avec allocation statique et organisation contigu Liste avec allocation statique et organisation contigu ë ë
Liste avec allocation statique et organisation cha Liste avec allocation statique et organisation cha în î n ée simple é e simple
Liste avec allocation dynamique par bloc et organisation chaî Liste avec allocation dynamique par bloc et organisation cha în né ée double e double
0 1 2 3 4 5 6 7 8 9
Alfred
Alexia Katy Karen Ken Kevin Mike Patrick - -
List
- 7
Zach -1
- 0
Katy 4
Karen 8
Christ 3
Alexia 5
- -1
Nicolas 9
Patrick 1
0 1 2 3 4 5 6 7 8 9
Data
6
First
List
2
Empty
0 1 2 3 4
5
MemAlloc
SList
3 -1 Alexia
-1 3 Sassia
-1 - -
1 0 Nicolas
2 - -
1
Last
3
n
4
Empty
0
First
Ö
Data
Exemples d’implémentation de liste
Exemples d’implémentation de liste (2/3) (2/3)
Liste avec allocation dynamique par enregistrement et organisati Liste avec allocation dynamique par enregistrement et organisati on on chaî cha î n n ée simple é e simple (ou liste chaî (ou liste cha în né ée) e)
Listes doublement cha Listes doublement cha î î n n é é es es (standard et circulaire) (standard et circulaire)
Alexia
Ö
Ben
Ö
Christ
Ö
Katy
Ö
Karen
Ö
Nicolas
Ö
Patrick
Ö Ö
Head
List
Ö Õ Ö
Õ Ö
Õ
Ö Õ
Ö Õ
Ö Õ Ö
Õ
Alexia
Ö
Ben Christ Katy Karen Nicolas PatrickÖ Head Tail
List
Alexia
Ö
Ben
Ö
Christ
Ö
Katy
Ö
Karen
Ö
Nicolas
Ö
Õ Õ Õ Õ Õ Õ
Ö Head
List
Exemples d’implémentation de liste
Exemples d’implémentation de liste (3/3) (3/3)
Liste gé Liste g én né éralis ralisé ée e
Implémentations de listes
Implémentations de listes (1/2) (1/2)
On fera l On fera l ’ ’ impl impl é é mentation de 3 listes diff mentation de 3 listes diff é é rentes : rentes :
liste avec allocation statique et organisation contiguë liste avec allocation statique et organisation contigu ë; ;
liste avec allocation dynamique par enregistrement et organisati liste avec allocation dynamique par enregistrement et organisati on on chaî cha în né ée simple e simple
(liste chaî(liste chaînnéée simple)e simple); ;
liste avec allocation dynamique par bloc et organisation par double liste avec allocation dynamique par bloc et organisation par dou ble chaî cha înage nage
(liste chaî(liste chaînnéée double dans un tableau dynamique)e double dans un tableau dynamique). .
Toutes les listes n’ Toutes les listes n ’auront qu auront qu’ ’ une seule donné une seule donn ée e (une chaî (une cha îne de ne de caract
caractè ères) res) et devront être tri et devront être tri ée en ordre croissant. é e en ordre croissant.
Seulement quelques services seront implanté Seulement quelques services seront implant és, par exemple : s, par exemple :
Compter le nombre d Compter le nombre d ’ ’ enregistrements enregistrements Length( Length (… …) )
Insé Ins érer un nouvel enregistrement rer un nouvel enregistrement Insert(… Insert( …) )
Supprimer un enregistrement existant Supprimer un enregistrement existant Delete( Delete (… …) )
Rechercher un enregistrement Rechercher un enregistrement Search( Search (… …) )
Consulter un enregistrement Consulter un enregistrement Retrieve( Retrieve (… …) )
Cr Cr é é er et/ou initialiser la liste de donn er et/ou initialiser la liste de donn ées é es Create( Create (… …) )
Dé D étruire la liste de donn truire la liste de donné ées es Destroy(… Destroy( …) )
Afficher le contenu de la liste de donn Afficher le contenu de la liste de donn ées é es PrintList( PrintList (… … ) )
Parcourir la liste de donné Parcourir la liste de donn é es es GoThrough( GoThrough (… … ) )
Implémentations de listes
Implémentations de listes (2/2) (2/2)
Quelques commentaires avant de commencer Quelques commentaires avant de commencer
Les m Les m é é thodes r thodes r é é alis alis é é es sont bas es sont bas é é es sur quelques approches es sur quelques approches particuli
particuli è è res. En fait, il existe une multitude d res. En fait, il existe une multitude d ’ ’ approches approches possibles et elles sont tous aussi valables les unes que les possibles et elles sont tous aussi valables les unes que les autres, avec leurs avantages et leurs inconv
autres, avec leurs avantages et leurs inconv é é nients. nients.
Il est recommandé Il est recommand é dans la plupart des cas d’ dans la plupart des cas d ’ utiliser une utiliser une structure globale ou une structure d
structure globale ou une structure d’ ’ en- en - tête permettant le tête permettant le stockage des informations g
stockage des informations gé én né érales de la liste telles que le rales de la liste telles que le nombre d
nombre d’é ’él l éments é ments (même si cette mé (même si cette m éthode requiert l thode requiert lé ég gè èrement plus de rement plus de
mé m émoire) moire) . .
Impl Impl é é mentation d mentation d ’ ’ une liste avec allocation une liste avec allocation statique et organisation contigu
statique et organisation contigu ë ë
Alexia Alfred Katy Karen Ken Kevin Mike Patrick - -
0 1 2 3 4 5 6 7 8 9
Data
7
LasPos
SList
Implémentation d’une liste avec allocation statique et Implémentation d’une liste avec allocation statique et
organisation contiguë
organisation contiguë (1/14) (1/14) Dé D éfinition d finition d’ ’un exemple de ce type de TDA un exemple de ce type de TDA
Le TDA contient : Le TDA contient :
un tableau de taille fixe contenant les donné un tableau de taille fixe contenant les donn ées es
(qui peut contenir un(qui peut contenir un nombre maximum d
nombre maximum dééfini dfini d’’enregistrements)enregistrements)
; ;
une variable entiè une variable enti ère contenant l re contenant l’ ’indexe du dernier enregistrement indexe du dernier enregistrement pré pr ésent dans le tableau sent dans le tableau
(nommons cette variable(nommons cette variable
LastPos)LastPos); ;
La variable LastPos La variable LastPos indique l indique l ’indexe du dernier enregistrement, ’ indexe du dernier enregistrement, c’ c ’ est est -à - à- -dire que dire que LastPos LastPos = n - = n - 1 1 (où (o ù n est le nombre n est le nombre
d’ d ’enregistrements) enregistrements) . Ainsi, lorsqu’ . Ainsi, lorsqu ’il n il n’ ’ y a aucun enregistrement y a aucun enregistrement pr pr ésent : é sent : LastPos LastPos = - = -1 1 . .
Les fonctions de cr Les fonctions de cr éation et de destruction de la structure de é ation et de destruction de la structure de donn donn ées sont inutiles puisque ces derni é es sont inutiles puisque ces derniè ères sont prises en res sont prises en
charge par le compilateur au moment de la d
charge par le compilateur au moment de la d é é claration de la claration de la variable.
variable.
Par contre, le TDA doit être initialis Par contre, le TDA doit être initialis é é correctement. C correctement. C ’ ’ est est - - à à - - dire dire que la variable
que la variable LastPos LastPos doit être initialis doit être initialis ée é e à à -1. - 1.
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(2/14) (2/14)
1. 1. D D é é claration des types n claration des types n é é cessaires au cessaires au TDA TDA . .
2. 2. Fonction d Fonction d ’ ’ initialisation initialisation (mettre la variable (mettre la variable LastPos LastPos à à -1) - 1) . .
void InitList(SList *pList) {
pList->LastPos = -1;
}
#define MAXDATA 1000
#define STRLENGTH 25 typedef struct {
int LastPos;
char Data[MAXDATA][STRLENGTH];
} SList;
SList List;
Alexia Alfred Katy Karen Ken Kevin Mike Patrick - -
0 1 2 3 4 5 6 7 8 9
Data
7
LasPos
SList
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(3/14) (3/14)
3. 3. Fonction d’ Fonction d ’insertion insertion
(exemple : ajouter l’(exemple : ajouter l
’enregistrement John)enregistrement John)1. 1. Description logique. Cette fonction s’ Description logique. Cette fonction s ’effectue en 5 op effectue en 5 opé érations : rations :
1.
1.
s’s
’assurer quassurer qu’’il reste un enregistrement de libre dans le tableau il reste un enregistrement de libre dans le tableau (facultatif)(facultatif);;
2.2.
trouver la position de l’trouver la position de l
’enregistrement enregistrement ààins
inséérer dans le tableau rer dans le tableau(l’(l’enregistrement recherchenregistrement recherchéédoit possdoit possééder une valeur plus grand que celui der une valeur plus grand que celui ààinséinsérer)rer)
; ;
3.
3.
effectuer un déeffectuer un d
écalage calage ààdroite àdroite
àpartir de lpartir de l
’endroit d’
endroit d’’insertion;insertion;John
Alexia Alfred Katy Karen Ken Kevin Mike Patrick - -
0 1 2 3 4 5 6 7 8 9
Data
7
LasPos
SList
John
Alexia Alfred Katy -
0 1 2 3 4 5 6 7 8 9
Data
7
LasPos
SList
Karen Ken Kevin Mike Patrick Katy
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(4/14) (4/14)
3. 3. Fonction d’ Fonction d ’insertion insertion
(suite)(suite)
1. 1. Description logique Description logique
(suite)(suite). .
4.
4.
inséins
érer la nouvelle donnrer la nouvelle donnéée e ààla position trouvéla position trouv
ée;e;5.
5.
ajuster les variables de contrôle.ajuster les variables de contrôle.
Alexia Alfred Katy Karen Ken Kevin Mike Patrick -
0 1 2 3 4 5 6 7 8 9
Data
7
LasPos
SList
John
Alexia Alfred Katy Karen Ken Kevin Mike Patrick -
0 1 2 3 4 5 6 7 8 9
Data
8
LasPos
SList
John
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(5/14) (5/14)
3. 3. Fonction d’ Fonction d ’ insertion insertion (suite) (suite)
2. 2. Dé D éfinition du prototype de la fonction finition du prototype de la fonction
(dé(définition des entrfinition des entréées/sorties)es/sorties)3. 3. Dé D éfinition des parties logiques par des finition des parties logiques par des pseudo pseudo - - codes codes : :
1. 1. s’ s ’assurer qu assurer qu’ ’il reste un enregistrement de libre dans le tableau; il reste un enregistrement de libre dans le tableau;
2. 2. trouver la position de l’ trouver la position de l ’enregistrement enregistrement à à insé ins é rer dans le tableau; rer dans le tableau;
3. 3. effectuer un dé effectuer un d écalage calage à à droite à droite à partir de l’ partir de l ’endroit d endroit d’ ’insertion; insertion;
4. 4. insé ins érer la nouvelle donn rer la nouvelle donné ée e à à la position trouvé la position trouv é e; e;
5. 5. ajuster les variables de contrôle. ajuster les variables de contrôle.
Position = Recherche plus grand que : NewValue dans : pList void Insert(SList *pList, char NewValue[], int *Success);
i = LastPos
Tant que i >= Position
Valeur à i = Valeur à i + 1 i = i - 1
Valeur à Position = NewValue
Si LastPos < MAXDATA (on peut insérer)
LastPos = LastPos + 1 Success = vrai;
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(6/14) (6/14)
3. 3. Fonction d’ Fonction d ’ insertion insertion (suite) (suite)
4. 4. Écriture finale du code en langage C É criture finale du code en langage C
void Insert(SList *pList, char NewValue[], int *Success) {
int i, Pos;
/*** 1ière étape : Vérifie que la liste existe et qu'elle n'est pas remplie ***/
if ((pList != NULL) && (pList->LastPos < MAXDATA)) { /*** 2ière étape : Recherche du point d'insertion ***/
Pos = SearchGreater(pList, NewValue);
/* Si le point d'insertion est valide on insère */
if (Pos != -1) {
/*** 3ième étape : Décalage à droite à partir du point d'insertion ***/
for (i = pList->LastPos; i >= Pos; i--) { strcpy(pList->Data[i+1], pList->Data[i]);
}
/*** 4ième étape : Copie les données ***/
strcpy(pList->Data[Pos], NewValue);
/*** 5ième étape : Ajuste les variables de contrôle ***/
pList->LastPos++;
*Success = 1;
} else {
*Success = 0;
} } else
*Success = 0;
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(7/14) (7/14)
4. 4. Fonction de suppression Fonction de suppression (exemple : supprimer l’ (exemple : supprimer l ’enregistrement Katy) enregistrement Katy)
Attention
Attention à à la mé la m é thode de suppression direct qui est inapproprié thode de suppression direct qui est inappropri ée e
1. 1. Description logique. Cette fonction s Description logique. Cette fonction s ’effectue en 4 op ’ effectue en 4 opé érations : rations :
1. 1. s’ s ’assurer qu assurer qu’ ’il existe au moins un enregistrement de libre dans le tableau; il existe au moins un enregistrement de libre dans le tableau;
(facultatif car l
(facultatif car l’é’étape suivante peut faire cette tâche)tape suivante peut faire cette tâche)
2. 2. trouver la position de l’ trouver la position de l ’enregistrement enregistrement à à supprimer dans le tableau; supprimer dans le tableau;
Alexia Alfred Karen Ken Kevin Mike Patrick -
0 1 2 3 4 5 6 7 8 9
Data
8
LasPos
SList
John Katy
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(8/14) (8/14)
4. 4. Fonction de suppression Fonction de suppression (suite) (suite)
1. 1. Description logique Description logique
(suite)(suite). .
3. 3. effectuer un dé effectuer un d écalage calage à à gauche à gauche à partir de l’ partir de l ’endroit de suppression; endroit de suppression;
4. 4. ajuster les variables de contrôle. ajuster les variables de contrôle.
Alexia Alfred -
0 1 2 3 4 5 6 7 8 9
Data
8
LasPos
SList
John Karen Ken Kevin Mike Patrick Patrick
Alexia Alfred Karen Ken Kevin Mike Patrick -
0 1 2 3 4 5 6 7 8 9
Data
7
LasPos
SList
John Patrick
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(9/14) (9/14)
4. 4. Fonction de suppression Fonction de suppression (suite) (suite)
2. 2. Dé D éfinition du prototype de la fonction finition du prototype de la fonction
(dé(définition des entrfinition des entréées/sorties)es/sorties)3. 3. Dé D éfinition des parties logiques par des finition des parties logiques par des pseudo pseudo - - codes codes : :
1. 1. s’ s ’assurer qu assurer qu’ ’il existe au moins un enregistrement de libre dans le tableau; il existe au moins un enregistrement de libre dans le tableau;
2. 2. trouver la position de l’ trouver la position de l ’enregistrement enregistrement à à supprimer dans le tableau; supprimer dans le tableau;
3. 3. effectuer un dé effectuer un d écalage calage à à gauche à gauche à partir de l’ partir de l ’endroit de suppression; endroit de suppression;
4. 4. ajuster les variables de contrôle. ajuster les variables de contrôle.
Position = Recherche exactement : OldValue) dans : pList void Delete(SList *pList, char OldValue[], int *Success);
i = Position
Tant que i < LastPos
Valeur à i = Valeur à i + 1 i = i + 1
LastPos = LastPos - 1 Success = vrai
Si LastPos >= 0 (on peut continuer)
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(10/14) (10/14)
4. 4. Fonction de suppression Fonction de suppression (suite) (suite)
4. 4. Écriture finale du code en langage C É criture finale du code en langage C
void Delete(SList *pList, char OldValue[], int *Success) {
int i, Pos;
/*** 1ière étape : Vérifie que la liste existe et qu'elle n'est pas vide ***/
if ((pList != NULL) && (pList->LastPos >= 0)) {
/*** 2ième étape : Recherche l'enregistrement à supprimer ***/
Pos = SearchEqual(pList, OldValue);
/* Si le point de suppression est valide on supprime */
if (Pos != -1) {
/*** 3ième étape : Décalage à gauche à partir du point de suppression ***/
for (i = Pos; i < pList->LastPos; i++)
strcpy(pList->Data[i], pList->Data[i+1]);
/*** 4ième étape : Ajuste les variables de contrôle ***/
pList->LastPos--;
*Success = 1;
} else {
*Success = 0;
}
} else {
*Success = 0;
} }
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(11/14) (11/14)
5. 5. Fonction de recherche Fonction de recherche (exemple : rechercher l’ (exemple : rechercher l ’enregistrement Patrick) enregistrement Patrick)
1. 1. Description logique. Cette fonction s Description logique. Cette fonction s ’effectue par : ’ effectue par :
parcourir le tableau tant que les conditions de recherche ne soient pas parcourir le tableau tant que les conditions de recherche ne soi ent pas atteintes. Ces conditions peuvent varier en fonction des besoin
atteintes. Ces conditions peuvent varier en fonction des besoins et peuvent s et peuvent être, par exemple :
être, par exemple :
1.1. l’l’enregistrement uniquement enregistrement uniquement éégal gal àà celui recherchcelui recherchéé;; 2.2. l’l’enregistrement plus petit que celui recherchenregistrement plus petit que celui recherchéé;; 3.
3. l’l’enregistrement plus grand que celui recherchenregistrement plus grand que celui recherchéé;; 4.4. ... .... .
de plus, cette ré de plus, cette r éf fé érence peut prendre deux formes d rence peut prendre deux formes dé é pendamment des pendamment des besoins et de la m
besoins et de la mé éthode d thode d’ ’impl implé é mentation du TDA : mentation du TDA :
1.1. l’l’indexe du tableau correspondant indexe du tableau correspondant ààl’l’enregistrement enregistrement (ou (ou --1 si aucun r1 si aucun réésultat)sultat);; 2.
2. le pointeur correspondant àle pointeur correspondant à l’l’enregistrement enregistrement (ou NULL si aucun r(ou NULL si aucun résultat)ésultat). .
2. 2. Dé D éfinition du prototype de la fonction finition du prototype de la fonction
(dé(définition des entrfinition des entréées/sorties)es/sorties)3. 3. Dé D éfinition de la recherche par un finition de la recherche par un pseudo pseudo- -code code : :
int Search(SList *List, char Value[]);
i = 0;
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(12/14) (12/14)
5. 5. Fonction de recherche Fonction de recherche (suite) (suite)
4. 4. Écriture finale du code en langage C : É criture finale du code en langage C :
int SearchEqual(SList *pList, char Value[]) {
int i = 0, iRes = -1, n = Length(pList);
/* Vérifie que la liste ne soit pas vide */
if (n != 0) {
while ((i <= pList->LastPos) && (strcmp(pList->Data[i], Value) < 0)) i++;
/* S'assure que l'élément recherché est celui trouvé */
if ((i <= pList->LastPos) && (strcmp(pList->Data[i], Value) == 0)) { iRes = i;
} }
return iRes;
}
int SearchGreater(SList *pList, char Value[]) {
int i = 0, iRes = -1, n = Length(pList);
/* Vérifie que la liste ne soit pas pleine */
if (n < MAXDATA) {
while ((i <= pList->LastPos) && (strcmp(pList->Data[i], Value) <= 0)) i++;
iRes = i;
}
return iRes;
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(13/14) (13/14)
6. 6. Fonction de comptage Fonction de comptage
7. 7. Fonction questionnant le TDA à Fonction questionnant le TDA à savoir s’ savoir s ’il est vide il est vide
8. 8. Fonction retournant un é Fonction retournant un él lé ément en fonction de sa position ment en fonction de sa position
int Length(SList *pList) {
return pList->LastPos + 1;
}
int IsEmpty(SList *pList) {
return (Length(pList) == 0) ? 1 : 0;
}
char* Retrieve(SList *pList, int i) {
if ((i > 0) && (i <= Length(pList))) { return pList->Data[i-1];
} else {
return NULL;
} }
Implémentation d’une liste avec allocation Implémentation d’une liste avec allocation
statique et organisation contiguë statique et organisation contiguë
(14/14) (14/14)
Quelques commentaires Quelques commentaires
On remarque que le d On remarque que le d écalage des é calage des é él lé éments devient un probl ments devient un problè ème me de performance important associ
de performance important associ é é à à la maintenance des la maintenance des
donn donn ées si la taille des ces derni é es si la taille des ces derniè ères devient consid res devient consid érable ou si é rable ou si il y a un grand nombre de manipulations.
il y a un grand nombre de manipulations.
Les TDA basé Les TDA bas és sur les structures par cha s sur les structures par chaî î nage sont une solution nage sont une solution trè tr ès efficace au probl s efficace au problè ème de d me de d écalage pour les insertions et é calage pour les insertions et
suppressions entre les
suppressions entre les é él lé éments ments
Impl Impl é é mentation d mentation d ’ ’ une liste avec allocation une liste avec allocation dynamique par enregistrement et
dynamique par enregistrement et organisation en cha
organisation en cha î î ne ne
(liste cha
(liste cha î î n n é é e) e)
Alexia
Ö
Ben
Ö
Christ
Ö
Katy
Ö
Karen
Ö
Nicolas
Ö
Patrick
Ö Ö
Head
Implémentation d’une liste avec allocation dynamique par enregis
Implémentation d’une liste avec allocation dynamique par enregistrement et trement et organisation chaînée simple (liste chaînée simple)
organisation chaînée simple (liste chaînée simple) (1/15) (1/15)
D D é é finition d finition d ’ ’ un exemple de ce type de TDA un exemple de ce type de TDA
Le TDA est d Le TDA est d é é fini comme suit : fini comme suit :
chaque enregistrement est dé chaque enregistrement est d éfini par une structure contenant les fini par une structure contenant les donné donn ées et un pointeur vers la structure suivante; es et un pointeur vers la structure suivante;
la liste est ré la liste est r é fé f é renc renc ée par un pointeur global qui pointe vers le é e par un pointeur global qui pointe vers le premier
premier é él lé ément de la liste. On nomme ce pointeur, le pointeur de ment de la liste. On nomme ce pointeur, le pointeur de tête.
tête.
La fin de la liste est indiqu La fin de la liste est indiqu ée par un pointeur nul. é e par un pointeur nul.
La fonction de cré La fonction de cr éation a le rôle d ation a le rôle d’ ’ initialiser correctement le initialiser correctement le pointeur de tête
pointeur de tête à à une valeur nulle (pour ainsi assurer la une valeur nulle (pour ainsi assurer la coh coh érence de la liste d é rence de la liste d ès le d è s le d épart). é part).
D’ D ’ un autre côté un autre côt é, la fonction de destruction du TDA doit plutôt , la fonction de destruction du TDA doit plutôt s’ s ’ assurer qu assurer qu ’il ne reste aucun enregistrements allou ’ il ne reste aucun enregistrements alloué és pour la s pour la
liste.
liste.
Implémentation d’une liste avec allocation dynamique par Implémentation d’une liste avec allocation dynamique par enregistrement et organisation chaînée simple (liste chaînée enregistrement et organisation chaînée simple (liste chaînée simple)
simple) (2/15) (2/15)
1. 1. Dé D éclaration des types n claration des types n écessaires au é cessaires au TDA. TDA .
2. 2. Fonction de cré Fonction de cr éation de la liste ation de la liste (qui consiste à (qui consiste à initialiser le pointeur de tête à initialiser le pointeur de tête à une valeur nulle)
une valeur nulle) . .
void CreateList(SNode **pHead) {
*pHead = NULL;
}
#define STRLENGTH 25 typedef struct _node { char Data[STRLENGTH];
struct _node *Next;
} SNode;
Alexia
Ö
Ben
Ö
Christ
Ö
Katy
Ö
Karen
Ö
Nicolas
Ö
Patrick
Ö Ö
Head
Implémentation d’une liste avec allocation dynamique par Implémentation d’une liste avec allocation dynamique par enregistrement et organisation chaînée simple (liste chaînée enregistrement et organisation chaînée simple (liste chaînée simple)
simple) (3/15) (3/15)
3. 3. Fonction de destruction de la liste Fonction de destruction de la liste (qui consiste à (qui consiste à libé lib é rer toute mé rer toute m é moire moire ré r é siduelle associé siduelle associ é e à e à la liste, soit tous les enregistrements restants) la liste, soit tous les enregistrements restants) . .
4. 4. Fonction qui vide tout le contenu de la liste. Fonction qui vide tout le contenu de la liste.
void DeleteAll(SNode **pHead) {
SNode *TempNode;
/* Libère tous les premiers noeuds de la liste tant qu'il en reste */
while (*pHead != NULL) { TempNode = *pHead;
*pHead = (*pHead)->Next;
free(TempNode);
}
*pHead = NULL;
}
void DestroyList(SNode **pHead) {
DeleteAll(pHead);
}
Implémentation d’une liste avec allocation dynamique par Implémentation d’une liste avec allocation dynamique par enregistrement et organisation chaînée simple (liste chaînée enregistrement et organisation chaînée simple (liste chaînée simple)
simple) (4/15) (4/15)
5. 5. Fonction d’ Fonction d ’ affichage de la liste affichage de la liste (avec parcours en ordre croissant) (avec parcours en ordre croissant)
6. 6. Fonction de comptage Fonction de comptage
void PrintList(SNode *Head) {
SNode *Cur = Head;
while (Cur != NULL) { /* Parcours la liste et affiche son contenue */
printf("%s\n", Cur->Data);
Cur = Cur->Next;
} }
void Length(SNode *Head) {
SNode *Cur = Head;
int n = 0;
while (Cur != NULL) { /* Parcours la liste et compte le nombre d’item */
Cur = Cur->Next;
n++;
}
return n;
}
Implémentation d’une liste avec allocation dynamique par Implémentation d’une liste avec allocation dynamique par enregistrement et organisation chaînée simple (liste chaînée enregistrement et organisation chaînée simple (liste chaînée simple)
simple) (5/15) (5/15)
7. 7. Fonction questionnant le TDA à Fonction questionnant le TDA à savoir s’ savoir s ’ il est vide il est vide
8. 8. Fonction retournant un é Fonction retournant un él lé ément en fonction de sa position ment en fonction de sa position
char* Retrieve(SNode *Head, int i) {
SNode *Cur = Head;
if ((i > 0) && (i <= Length(Head))) {
for (Cur = Head; i > 1; Cur = Cur->Next, i--);
return Cur->Data;
} else {
return NULL;
} }
void IsEmpty(SNode *Head) {
return (Head == NULL) ? 1 : 0;
}
Implémentation d’une liste avec allocation dynamique par Implémentation d’une liste avec allocation dynamique par enregistrement et organisation chaînée simple (liste chaînée enregistrement et organisation chaînée simple (liste chaînée simple)
simple) (6/15) (6/15)
9. 9. Fonction d’ Fonction d ’ insertion insertion (exemple : ajouter l’ (exemple : ajouter l ’enregistrement John) enregistrement John)
1. 1. Description logique. Cette fonction s Description logique. Cette fonction s ’effectue en 3 op ’ effectue en 3 opé érations : rations :
1. 1. trouver la position de l’ trouver la position de l ’enregistrement enregistrement à à insé ins é rer dans la liste rer dans la liste
(l’
(l
’enregistrement recherchenregistrement recherchéédoit possédoit poss
éder une valeur plus grand que celui der une valeur plus grand que celui ààinséins
érer)rer); ;
2. 2. allouer la mé allouer la m é moire né moire n écessaire au nouvel enregistrement et copier les cessaire au nouvel enregistrement et copier les donné donn é es; es;
Alexia
Ö
Ben
Ö
Christ
Ö
Katy
Ö
Karen
Ö
Nicolas
Ö
Patrick
Ö Ö
Head
John
Ö Ö
Prev
Ö Cur
Ö New
Alexia
Ö
Ben
Ö
Christ
Ö
Katy
Ö
Karen
Ö
Nicolas
Ö
Patrick
Ö Ö
Head
John
Ö Prev
Ö
Cur
Implémentation d’une liste avec allocation dynamique par Implémentation d’une liste avec allocation dynamique par enregistrement et organisation chaînée simple (liste chaînée enregistrement et organisation chaînée simple (liste chaînée simple)
simple) (7/15) (7/15)
9. 9. Fonction d’ Fonction d ’ insertion insertion (suite) (suite)
1. 1. Description logique Description logique
(suite)(suite). .
3. 3. ajuster les ré ajuster les r éf fé é rences de liens et variables de contrôle. rences de liens et variables de contrôle.
Alexia
Ö
Ben
Ö
Christ
Ö
Katy
Ö
Karen
Ö
Nicolas
Ö
Patrick
Ö Ö
Head
John
Ö Ö
Prev
Ö Cur
Ö
New
Implémentation d’une liste avec allocation dynamique par Implémentation d’une liste avec allocation dynamique par enregistrement et organisation chaînée simple (liste chaînée enregistrement et organisation chaînée simple (liste chaînée simple)
simple) (8/15) (8/15)
9. 9. Fonction d’ Fonction d ’ insertion insertion (suite) (suite)
2. 2. Dé D éfinition du prototype de la fonction finition du prototype de la fonction
(dé(définition des entrfinition des entréées/sorties)es/sorties)3. 3. Dé D éfinition des parties logiques par des finition des parties logiques par des pseudo pseudo - - codes codes : :
1. 1. trouver la position de l’ trouver la position de l ’enregistrement enregistrement à à insé ins é rer dans la liste; rer dans la liste;
2. 2. allouer la mé allouer la m é moire né moire n écessaire au nouvel enregistrement et copier les cessaire au nouvel enregistrement et copier les donné donn é es; es;
New = nouvel enregistrement La valeur de New = NewValue
void Insert(SNode **pHead, char NewValue[], int *Success);
Initialise Prev = nul et Cur = pHead
Tant que Cur != nul et que la valeur de Cur < NewValue Prev = Cur
Cur = prochain
Implémentation d’une liste avec allocation dynamique par Implémentation d’une liste avec allocation dynamique par enregistrement et organisation chaînée simple (liste chaînée enregistrement et organisation chaînée simple (liste chaînée simple)
simple) (9/15) (9/15)
9. 9. Fonction d’ Fonction d ’ insertion insertion (suite) (suite)
3. 3. Dé D éfinition des parties logiques par des finition des parties logiques par des pseudo pseudo - - codes codes
(suite)(suite): :
3. 3. ajuster les ré ajuster les r éf fé é rences de liens et variables de contrôle. rences de liens et variables de contrôle.
*** Insertion au début de la liste Si Prev = nul
Le prochain de New = pHead pHead = New
*** Insertion entre 2 noeuds ou à la fin Sinon
Le prochain de New = Cur Le prochain de Prev = New