• Aucun résultat trouvé

ƒ 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.

N/A
N/A
Protected

Academic year: 2022

Partager "ƒ 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."

Copied!
33
0
0

Texte intégral

(1)

2

comme suit : comme suit :

ƒ

ƒ Ensemble de donnéEnsemble de données relies reliéées par une partie lien, qui permet des 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 e de n n groupes de groupes de m 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 enregistrements de m m donn donné ées chacun. es chacun.

Liste d’appartements à louer

Type maisonDuplexe Nbr. pieces7 ½

ChaufféNon CartierRosemont

Garage incluNon MeubléNon Cours incluNon

Prix mensuel900 $ Étage3ième

Type maisonDuplexe Nbr. pieces3 ½

ChaufféNon CartierRosemont

Garage incluOui MeubléNon Cours incluOui

Prix mensuel650 $ Étage1ier

Type maisonTriplexe Nbr. pieces4 ½

ChaufféNon CartierVerdun

Garage incluNon MeubléNon Cours incluNon

Prix mensuel550 $ Étage2ième

Type maisonMaison Nbr. pieces10 ½

ChaufféNon CartierOutremont

Garage incluOui MeubléOui Cours incluOui

Prix mensuel2200 $ Étage1ier - 2ième

Type maisonTriplexe Nbr. pieces6 ½

ChaufféNon CartierPetite-Patrie

Garage incluNon MeubléNon Cours incluNon

Prix mensuel750 $ Étage1ier

9 données par enregistrement

Liste de 5 enregistrements

1 enregistrement

(2)

© ÉTS - GPA - GPA665

3

ƒ ƒ 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 éralis ralisé ées, on fait r es, on fait ré é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) . .

4

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 é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.

(3)

© ÉTS - GPA - GPA665

5

ƒ ƒ 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 éments de provisions jointes ments de provisions jointes à à l’ l ’ensemble ensemble d d’ ’op opé érations pr rations pré éd éfinis. finis.

6

Un exemple : Une liste d’épicerie!

Un exemple : Une liste d’épicerie! (3/4) (3/4)

ƒ ƒ 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 et Length Length questionnent la liste et retourne des questionnent la liste et retourne des informations sur elle.

informations sur elle.

(4)

© ÉTS - GPA - GPA665

7

ƒ ƒ 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

8

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 ée simple e simple

ƒ ƒ Liste avec allocation dynamique par bloc et organisation cha Liste avec allocation dynamique par bloc et organisation chaî î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

(5)

© ÉTS - GPA - GPA665

9

ƒ ƒ Liste avec allocation dynamique par enregistrement et organisati Liste avec allocation dynamique par enregistrement et organisation on cha

chaî în ée simple e simple (ou liste chaî (ou liste cha în ée) e)

ƒ

ƒ Listes doublement cha Listes doublement chaî î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

10

Exemples d’implémentation de liste Exemples d’implémentation de liste (3/3) (3/3)

ƒ ƒ Liste g Liste gé én éralis ralisé ée e

(6)

© ÉTS - GPA - GPA665

11

ƒ ƒ 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 organisation on cha

chaî în ée simple e simple

(liste chaî(liste chaînée simple)e simple)

; ;

ƒ ƒ liste avec allocation dynamique par bloc et organisation par dou liste avec allocation dynamique par bloc et organisation par double ble cha

chaî înage nage

(liste cha(liste chaîîné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

LengthLength((……))

ƒ

ƒ Ins Insé érer un nouvel enregistrement rer un nouvel enregistrement

Insert(Insert(……))

ƒ ƒ Supprimer un enregistrement existant Supprimer un enregistrement existant

DeleteDelete((……))

ƒ ƒ Rechercher un enregistrement Rechercher un enregistrement

SearchSearch((……))

ƒ ƒ Consulter un enregistrement Consulter un enregistrement

RetrieveRetrieve((……))

ƒ

ƒ Cr Cré éer et/ou initialiser la liste de donn er et/ou initialiser la liste de donné ées es

CreateCreate((……))

ƒ

ƒ 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

PrintListPrintList((……))

ƒ ƒ Parcourir la liste de donn Parcourir la liste de donné ées es

GoThroughGoThrough((……))

12

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 érales de la liste telles que le rales de la liste telles que le nombre d

nombre d’é ’él éments ments

(même si cette m(même si cette mééthode requiert lthode requiert léégèrement plus de rement plus de m

émoire)moire)

. .

(7)

© ÉTS - GPA - GPA665

13

Alexia Alfred Katy Karen Ken Kevin Mike Patrick - -

0 1 2 3 4 5 6 7 8 9

Data 7

LasPos

SList

14

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 é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 LastPos(nommons cette variable LastPos))

; ;

ƒ

ƒ La variable La variable LastPos 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

dd’’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.

(8)

© ÉTS - GPA - GPA665

15

(2/14) (2/14)

1.

1. 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 LastPos (mettre la variable

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

16

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 sDescription logique. Cette fonction s’’effectue en 5 opeffectue 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 ààinsinséérer dans le tableau rer dans le tableau (l’(l’enregistrement recherchenregistrement recherchéédoit possédoit posséder une valeur plus grand que celui der une valeur plus grand que celui ààinsinséérer)rer)

; ;

3.3. effectuer un déeffectuer un décalage calage ààdroite droite ààpartir de l’partir de l’endroit dendroit 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

(9)

© ÉTS - GPA - GPA665

17

(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 trouvla 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

18

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 é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 é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;

(10)

© ÉTS - GPA - GPA665

19

(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;

}

20

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

(11)

© ÉTS - GPA - GPA665

21

(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

22

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 é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 é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)

(12)

© ÉTS - GPA - GPA665

23

(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;

} }

24

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 recherchécelui recherché;; 2.2. l’l’enregistrement plus petit que celui recherchenregistrement plus petit que celui recherchéé;; 3.3. ll’’enregistrement plus grand que celui recherchenregistrement plus grand que celui recherchéé;; 4.4. ... .... .

ƒƒ

de plus, cette ré de plus, cette r é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 ààll’’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 é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 éfinition de la recherche par un finition de la recherche par un pseudo pseudo- -code code : :

int Search(SList *List, char Value[]);

i = 0;

Tant que i <= LastPos et que la valeur de i < Value : i = i + 1

(13)

© ÉTS - GPA - GPA665

25

(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;

}

26

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 é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;

} }

(14)

© ÉTS - GPA - GPA665

27

(14/14) (14/14)

ƒ ƒ Quelques commentaires Quelques commentaires

ƒ

ƒ On remarque que le d On remarque que le dé écalage des calage des é é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 éments ments

28

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 ée) e)

Alexia Ö

Ben Ö

Christ Ö

Katy Ö

Karen Ö

Nicolas Ö

Patrick Ö Ö

Head

(15)

© ÉTS - GPA - GPA665

29 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 érenc rencé ée par un pointeur global qui pointe vers le e par un pointeur global qui pointe vers le premier

premier é é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.

30 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 é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

(16)

© ÉTS - GPA - GPA665

31 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

é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);

}

32 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;

}

(17)

© ÉTS - GPA - GPA665

33 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 é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;

}

34 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

(18)

© ÉTS - GPA - GPA665

35 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 é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

36 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 é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 é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

(19)

© ÉTS - GPA - GPA665

37 9.

9. Fonction d Fonction d’ ’insertion insertion (suite) (suite) 3.

3. 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 é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

38 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) (10/15) (10/15) 9. 9. 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(SNode **pHead, char NewValue[], int *Success) {

SNode *Prev, *Cur, *New;

/*** 1ière étape : Recherche du point d'insertion ***/

Prev = NULL; Cur = *pHead;

while ((Cur != NULL) && (strcmp(Cur->Data, NewValue) < 0)) { Prev = Cur; Cur = Cur->Next;

}

/*** 2ième étape : Allocation dynamique et copie des données ***/

if ((New = (SNode*) malloc(sizeof(SNode))) == NULL) {

*Success = 0; return;

}

strcpy(New->Data, NewValue);

/*** 3ième étape : Ajuste les variables de contrôle (les liens) ***/

if (Prev == NULL) { /* Insertion au début de la liste */

New->Next = *pHead;

*pHead = New;

} else { /* Insertion entre 2 noeuds ou à la fin */

New->Next = Cur;

Prev->Next = New;

}

*Success = 1;

}

(20)

© ÉTS - GPA - GPA665

39 10.

10. Fonction de suppression Fonction de suppression (exemple : supprimer l (exemple : supprimer l’ ’enregistrement Ben) enregistrement Ben) 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 à à supprimer de la liste; supprimer de la liste;

2.

2. ajuster les ré ajuster les r éf érences de liens; rences de liens;

Alexia Ö

Ben Ö

Christ Ö

Katy Ö

Karen Ö

Nicolas Ö

Patrick Ö Ö

Head Ö Prev

Ö Cur

Alexia Ö

Ben Ö

Christ Ö

Katy Ö

Karen Ö

Nicolas Ö

Patrick Ö Ö

Head Ö Prev

Ö Cur

40 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) (12/15) (12/15) 10. 10. Fonction de suppression Fonction de suppression (suite) (suite)

1. 1. Description logique Description logique

(suite)(suite)

. . 3.

3. libé lib érer la m rer la mé émoire associ moire associé ée e à à l’ l ’enregistrement enregistrement à à supprimer et ajuster les supprimer et ajuster les variables de contrôle.

variables de contrôle.

Alexia Ö

Christ Ö

Katy Ö

Karen Ö

Nicolas Ö

Patrick Ö Ö

Head Ö Prev

Ö Cur

Ben Ö

(21)

© ÉTS - GPA - GPA665

41 10.

10. Fonction de suppression Fonction de suppression (suite) (suite) 2.

2. 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 é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 à à supprimer de la liste; supprimer de la liste;

2. 2. ajuster les ré ajuster les r éf érences de liens; rences de liens;

*** Si la valeur recherchée a été trouvée

Si Cur != nul et que la valeur de Cur correspond à OldValue

*** Suppression au début de la liste Si Prev = nul

pHead = le prochain de Cur

*** Suppression entre 2 noeuds ou à la fin de la liste Sinon

le prochain de Prev = le prochain de Cur

void Delete(SNode **pHead, char OldValue[], int *Success);

Initialise Prev = nul et Cur = pHead

Tant que Cur != nul et que la valeur de Cur < NewValue Prev = Cur

Cur = le prochain de Cur

42 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) (14/15) (14/15) 10. 10. Fonction de suppression Fonction de suppression (suite) (suite)

3. 3. D éfinition des parties logiques par des finition des parties logiques par des pseudo pseudo- -codes codes

(suite)(suite)

: : 3.

3. libé lib érer la m rer la mé émoire associ moire associé ée e à à l’ l ’enregistrement enregistrement à à supprimer et ajuster les supprimer et ajuster les variables de contrôle.

variables de contrôle.

Libérer Cur Success = vrai

(22)

© ÉTS - GPA - GPA665

43 10.

10. 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(SNode **pHead, char OldValue[], int *Success) {

SNode *Prev = NULL, *Cur = *pHead;

/*** 1ière étape : Recherche de l'enregistrement à supprimer ***/

while ((Cur != NULL) && (strcmp(Cur->Data, OldValue) < 0)) { Prev = Cur;

Cur = Cur->Next;

}

/* Effectue la suppression si l'enregistrement recherché existe */

if ((Cur != NULL) && (strcmp(Cur->Data, OldValue) == 0)) {

/*** 2ième étape : Ajuste les variables de contrôle (les liens) ***/

if (Prev == NULL) { /* Suppression au début de la liste */

*pHead = Cur->Next;

} else { /* Suppression entre 2 noeuds ou à la fin de la liste */

Prev->Next = Cur->Next;

}

/*** 3ième étape : Libération de l'enregistrement ***/

free(Cur);

*Success = 1;

} else {

*Success = 0;

} }

44

Implé Impl é mentation d’ mentation d ’une liste avec allocation une liste avec allocation dynamique par bloc et organisation par dynamique par bloc et organisation par double cha

double chaî înage nage

(liste cha

(liste chaî în ée double dans un tableau dynamique) e double dans un tableau dynamique)

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

Str Next Prev

Références

Documents relatifs

• premièrement c’est avoir une idée approfondie sur l’application de l’approche théorique dans le milieu professionnel ce qui nous permettra de comprendre et de maîtriser

L'avantage de la méthode boothroyd est complètement prédictive rapide et qu'elle peut être adaptée à différents matériaux, et nous avons conclu avec se modèle

Returns the index in this list of the first occurrence of the specified element, or -1 if the List does not contain this element. Retourner l’indice de la première occurence

Adapter la fonction de création pour créer une liste linéaire chaînée dans l'ordre FIFO à partir de ce fichier binaire.. Exercice 2 : Supposons que les données

FICHIERS FICHIERS Mémoire de masse découpée en blocs Fichier : liste chaînée de blocs, ou.. arbre de blocs (répertoires

Écrivez un constructeur de la classe Liste qui, à partir d’un tableau dynamique d’éléments, crée la liste contenant les mêmes éléments dans le même ordre.. Donnez un

Implémentation d’une liste avec allocation dynamique par bloc et organisation organisation par double chaînage (liste chaînée double dans un tableau dynami. par double

© ÉTS - GPA - GPA665 46 Implémentation d’une liste avec allocation dynamique par bloc et Implémentation d’une liste avec allocation dynamique par bloc et organisation