• Aucun résultat trouvé

Définition d’une file Définition d’une file (1/3) (1/3)

N/A
N/A
Protected

Academic year: 2022

Partager "Définition d’une file Définition d’une file (1/3) (1/3) "

Copied!
30
0
0

Texte intégral

(1)

File File

Sassia Christ Ken Mike Alexia Karen 04:16 07:37 11:35 15:48 15:53 19:02 Queue

Ö Alexia

Ö Ben

Ö Christ

Ö Katy

Ö Karen

Ö Nicolas

Ö Patrick Ö

Queue

File -

- - -

- -

Nicolas Kar

en Pa

tric k

Alexia Zach Katy

7 6 8

11 10 9

5 43

01

2 0

FirstIn

5 LastIn Queue

FirstIn

LastIn

(2)

© ÉTS - GPA - GPA665

3

Définition d’une file Définition d’une file (1/3) (1/3)

ƒ ƒ Selon le Selon le Dictionnaire de l Dictionnaire de l’ ’informatique informatique de de Larousse Larousse, une file se , une file se d

éfinit comme suit : finit comme suit :

ƒ ƒ Rangement par ordre chronologique, des é Rangement par ordre chronologique, des év ènements associ nements associé és s à à plusieurs processus.

plusieurs processus.

ƒ ƒ Ainsi, une file correspond Ainsi, une file correspond à à une liste dont les donné une liste dont les donn ées sont es sont organis

organisé ées suivant le mode d es suivant le mode d’ ’organisation par position. organisation par position.

ƒ

ƒ Cette organisation par position se traduit par l Cette organisation par position se traduit par l’ ’acronyme suivant : acronyme suivant : FIFO (

FIFO (First First In – In First First Out) Out)

ƒ ƒ On appel aussi les files, les listes de priorit On appel aussi les files, les listes de priorité é ou les files de priorité ou les files de priorit é. .

ƒ

ƒ En anglais : file = En anglais : file = queue. queue.

Sassia Christ Ken Mike Alexia Karen 04:16 07:37 11:35 15:48 15:53 19:02 Queue

Schéma d’une file (Classement selon l’heure d’arrivée)

Définition d’une file Définition d’une file (2/3) (2/3)

ƒ

ƒ Le comportement du TDA file permet de mod Le comportement du TDA file permet de modé éliser liser certaines structures du monde r

certaines structures du monde ré éel telles que : el telles que :

ƒ ƒ les lignes de clients : les lignes de clients :

ƒ ƒ dans un restaurant ou dans un hôpital; dans un restaurant ou dans un hôpital;

ƒ

ƒ des services informatiques des services informatiques à à même un logiciel; même un logiciel;

ƒ ƒ des services informatiques dans un r des services informatiques dans un ré éseau; seau;

ƒ

ƒ . .

ƒ

ƒ La d La dé éfinition même de la file indique quel doit être le finition même de la file indique quel doit être le comportement de cette derni

comportement de cette derniè ère : re :

ƒ ƒ l’ l ’insertion d insertion d’ ’un enregistrement doit se faire un enregistrement doit se faire à à la fin de la liste; la fin de la liste;

ƒ

ƒ la suppression d’ la suppression d ’un enregistrement doit se faire au d un enregistrement doit se faire au dé ébut de la but de la liste;

liste;

ƒ ƒ comme la suppression, la consultation d’ comme la suppression, la consultation d ’un enregistrement doit un enregistrement doit se faire au d

se faire au dé ébut de la liste. but de la liste.

(3)

© ÉTS - GPA - GPA665

5

Définition d’une file Définition d’une file (3/3) (3/3)

ƒ ƒ D éfinition des services d finition des services d’ ’une file une file

ƒ ƒ Cr Cré éer une file vide er une file vide Create( Create (… …) )

ƒ ƒ D éterminer si la file est vide terminer si la file est vide IsEmpty( IsEmpty (… …) )

ƒ

ƒ Ins Insé érer un enregistrement dans la file rer un enregistrement dans la file Add( Add (… …) ) (insertion en queue de liste)

(insertion en queue de liste)

ƒ

ƒ Supprimer un enregistrement de la file Supprimer un enregistrement de la file Remove( Remove (… …) ) (suppression en tête de liste)

(suppression en tête de liste)

ƒ

ƒ Consulter un enregistrement de la file Consulter un enregistrement de la file QueueFront( QueueFront (… …) ) (consultation en tête de liste)

(consultation en tête de liste)

ƒ ƒ Un axiome pour les files : Un axiome pour les files :

QueueFront

QueueFront( (Add Add(... (...Add Add( (Add Add( (Add Add(Queue,I (Queue,I

11

),I ),I

22

),I ),I

33

)...I )...I

nn

)) = I )) = I

11

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (1/12) (1/12)

ƒ

ƒ Quelle structure de liste chaî Quelle structure de liste cha în ée utiliser ? e utiliser ?

ƒ ƒ Puisqu Puisqu’ ’on d on dé ésire toujours ins sire toujours insé érer rer à à la fin et supprimer au dé la fin et supprimer au d ébut but de la liste, une simple liste cha

de la liste, une simple liste chaî în ée n e né écessite l cessite l’ ’usage d usage d’ ’un un pointeur de tête et d

pointeur de tête et d’ ’un pointeur de queue. un pointeur de queue.

ƒ ƒ Une solution Une solution é él égante est d gante est d’ ’utiliser une liste circulaire, qui utiliser une liste circulaire, qui n écessite seulement un pointeur de liste. cessite seulement un pointeur de liste.

Ö Alexia

Ö

Ben Ö

Christ Ö

Katy Ö

Karen Ö

Nicolas Ö

Patrick Ö

Queue

Queue

Alexia Ö

Ben Ö

Christ Ö

Katy Ö

Karen Ö

Nicolas Ö

Patrick Ö Ö

Head

Ö Tail

(4)

© ÉTS - GPA - GPA665

7

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (2/12) (2/12)

Avec ce mode d

Avec ce mode d’ ’impl implé émentation, une TDA file est d mentation, une TDA file est dé éfini fini comme suit :

comme suit :

ƒ

ƒ on utilise une liste cha on utilise une liste chaî în ée circulaire; e circulaire;

ƒ ƒ on utilise un seul pointeur pour la file on utilise un seul pointeur pour la file (en pointant sur le dernier (en pointant sur le dernier é él ément, on peut acc ment, on peut accé éder der à à toute la liste) toute la liste) . .

ƒ

ƒ La fonction de cré La fonction de cr éation a le rôle d ation a le rôle d’ ’initialiser initialiser correctement le pointeur de tête

correctement le pointeur de tête à à une valeur nulle une valeur nulle

(pour ainsi assurer la coh

(pour ainsi assurer la cohé érence de la liste d rence de la liste dè ès le d s le dé épart) part) . .

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (3/12) (3/12) 1. 1. D éclaration du type n claration du type né écessaire cessaire à à la file. la file.

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

3. 3. Fonction questionnant la file Fonction questionnant la file à à savoir si elle est vide. savoir si elle est vide.

void Create(SNode **Queue) {

*Queue = NULL;

}

#define STRLENGTH 25 typedef struct _node { char Data[STRLENGTH];

struct _node *Next;

} SNode;

int IsEmpty(SNode *Queue) {

return (Queue == NULL) ? 1 : 0;

}

(5)

© ÉTS - GPA - GPA665

9

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (4/12) (4/12) 4.

4. Fonction de destruction de la file. Fonction de destruction de la file.

5.

5. Fonction retournant le premier enregistrement de la file. Fonction retournant le premier enregistrement de la file.

void Destroy(SNode **Queue) {

SNode *TempNode, *Cur;

/* Libère tous les premiers noeuds de la liste tant qu'il en reste */

if (!IsEmpty(*Queue)) { Cur = (*Queue)->Next;

do {

TempNode = Cur;

Cur = Cur->Next;

free(TempNode);

} while (Cur != *Queue);

*Queue = NULL;

} }

SNode* QueueFront(SNode *Queue) {

if (IsEmpty(Queue)) { return NULL;

} else {

return Queue->Next;

} }

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (5/12) (5/12)

6. 6. 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 :

Puisqu

Puisqu’ ’on conna on connaî ît la position d t la position d’ ’insertion insertion

(toujours (toujours ààla fin)la fin)

, aucune recherche de , aucune recherche de position n

position n’ ’est n est né écessaire. cessaire.

§§

allouer la mé allouer la m émoire n moire né écessaire au nouvel enregistrement; cessaire au nouvel enregistrement;

John Nicolas

Ö

Katy Ö

Ben Ö

Alexia Ö

Karen Ö Ö

Queue

John Ö Queue

On illustre, dans le cadre d’une opération d’insertion, les deux cas limites (insertion dans une file vide à gauche – insertion dans une file non-vide à droite)

- Ö Ö New

John Nicolas

Ö

Katy Ö

Ben Ö

Alexia Ö

Karen Ö Ö

Queue -

Ö John

Ö Queue

Ö New

(6)

© ÉTS - GPA - GPA665

11

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (6/12) (6/12) 6.

6. Fonction d Fonction d’ ’insertion insertion (suite) (suite) 1.

1. Description logique Description logique

(suite)(suite)

. . 2.

2. copier les donné copier les donn ées dans le nouvel enregistrement; es dans le nouvel enregistrement;

3. 3. ajuster les variables de liens. ajuster les variables de liens.

John Ö Ö New

Nicolas Ö

Katy Ö

Ben Ö

Alexia Ö

Karen Ö Ö

Queue John

Ö Ö Queue

Ö New

John Ö Ö New

Nicolas Ö

Katy Ö

Ben Ö

Alexia Ö

Karen Ö Ö

Queue John

Ö Ö Queue

Ö New

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (7/12) (7/12)

6. 6. 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. allouer la mé allouer la m émoire n moire né écessaire au nouvel enregistrement; cessaire au nouvel enregistrement;

2.

2. copier les donné copier les donn ées dans le nouvel enregistrement; es dans le nouvel enregistrement;

3.

3. ajuster les variables de liens. ajuster les variables de liens.

La valeur de New = NewValue int Add(SNode **Queue, char NewValue[])

Si la liste est vide Le prochain de New = New Sinon

Le prochain de New = Le prochain du pointeur de la file Le prochain du pointeur de la file = New

Fin du si

Le pointeur de la file = New;

New = nouvel enregistrement

(7)

© ÉTS - GPA - GPA665

13

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (8/12) (8/12) 6.

6. Fonction d Fonction d’ ’insertion insertion (suite) (suite) 4.

4. É Écriture finale du code en langage C criture finale du code en langage C

int Add(SNode **Queue, char NewValue[]) {

SNode *New;

/* Allocation dynamique et copie des données */

if ((New = (SNode*) malloc(sizeof(SNode))) != NULL) { strcpy(New->Data, NewValue);

/* Ajustement des variables de contrôle (de liens) */

if (IsEmpty(*Queue)) { /* Insertion dans une file vide */

New->Next = New;

} else { /* Insertion dans une file non vide */

New->Next = (*Queue)->Next;

(*Queue)->Next = New;

}

*Queue = New;

return 1;

} else { return 0;

} }

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (9/12) (9/12)

7. 7. Fonction de suppression Fonction de suppression

1. 1. Description logique. Cette fonction s Description logique. Cette fonction s’ ’effectue en 2 op effectue en 2 opé érations : rations : Puisqu

Puisqu’ ’on conna on connaî ît la position de suppression t la position de suppression

(toujours au d(toujours au déébut)but)

, aucune , aucune recherche de position n

recherche de position n’ ’est n est né écessaire. cessaire.

On illustre, dans le cadre d’une opération de suppression, les deux cas limites (suppression dans une file ayant 1 item à gauche – suppression dans une file ayant plus d’un items à droite )

Nicolas Ö

Katy Ö

Ben Ö

Alexia Ö

Karen Ö

Ö Queue Karen

Ö

Ö Queue

(8)

© ÉTS - GPA - GPA665

15

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (10/12) (10/12) 7.

7. Fonction de suppression Fonction de suppression (suite) (suite) 1.

1. Description logique Description logique

(suite)(suite)

. . 1.

1. ajuster les variables de contrôle et de liens; ajuster les variables de contrôle et de liens;

2. 2. libé lib érer la m rer la mé émoire associ moire associé ée e à à l’ l ’enregistrement enregistrement à à libé lib érer. rer.

Ö Old

Nicolas Ö

Katy Ö

Ben Ö

Alexia Ö

Karen Ö

Ö Queue Karen

Ö

Ö Queue

Ö Old

Nicolas Ö Ö Old

Katy Ö

Ben Ö

Alexia Ö

Karen Ö

Ö Queue Ö

Queue

Ö Old

Karen Ö

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (11/12) (11/12)

7. 7. 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. ajuster les variables de contrôle et de liens; ajuster les variables de contrôle et de liens;

2. 2. libé lib érer la m rer la mé émoire associ moire associé ée e à à l’ l ’enregistrement enregistrement à à libé lib érer. rer.

Old = Le prochain du pointeur de la file

Si Le prochain du pointeur de la file = le pointeur de la file Le pointeur de la file = NULL

Sinon

Le prochain du pointeur de la file =

le prochain du prochain du pointeur de la file int Remove(SNode **Queue)

Libérer Old

(9)

© ÉTS - GPA - GPA665

17

Implémentation d’une file par une liste chaînée Implémentation d’une file par une liste chaînée (12/12) (12/12) 7.

7. Fonction de suppression Fonction de suppression (suite) (suite) 4.

4. É Écriture finale du code en langage C criture finale du code en langage C

int Remove(SNode **Queue) {

SNode *Old;

/* S'assure qu'il reste au moins un enregistrement dans la file */

if (IsEmpty(*Queue)) { return 0;

} else {

/* Ajustement des variables de contrôle (de liens) */

Old = (*Queue)->Next;

if ((*Queue)->Next == *Queue) { /* Supprime le dernier de la liste */

*Queue = NULL;

} else {

(*Queue)->Next = (*Queue)->Next->Next;

}

/* Libération de la mémoire */

free(Old);

return 1;

} }

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (1/15) (1/15)

ƒ ƒ La gestion d La gestion d’ ’une file dans un tableau n une file dans un tableau né écessite une approche cessite une approche particuli

particuliè ère. re.

ƒ

ƒ L L’ ’utilisation d utilisation d’ ’indexes indiquant les positions de d indexes indiquant les positions de dé ébut et de fin de la but et de fin de la file dans le tableau est n

file dans le tableau est né écessaire. cessaire.

ƒ ƒ Par contre, le fait d Par contre, le fait d’ ’incr incré émenter simplement ces deux indexes menter simplement ces deux indexes à à chaque chaque suppression et insertion implique que les donn

suppression et insertion implique que les donné ées seront tass es seront tassé ées es à à droite apr

droite aprè ès plusieurs manipulations. s plusieurs manipulations.

Katy Zach Alexia - - - - -

0 1 2 3 4 5 6 7

Data 2

LastIn Queue

0 FirstIn

- Zach Alexia Nicolas Patrick Karen - -

0 1 2 3 4 5 6 7

Data 5

LastIn Queue

1 FirstIn

- - - Nicolas Patrick Karen Marc Maria

0 1 2 3 4 5 6 7

Data 7

LastIn Queue

3 FirstIn T1

T2

T3

(10)

© ÉTS - GPA - GPA665

19

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (2/15) (2/15)

ƒ ƒ Une solution possible est le d Une solution possible est le dé écalage calage à à gauche des donné gauche des donn ées. es.

ƒ ƒ À À chaque insertion on insè chaque insertion on ins ère re à à la fin de la file la fin de la file

(ce qui n(ce qui n’’engendre aucun engendre aucun probl

problèème si le tableau nme si le tableau n’’est pas plein)est pas plein)

. .

ƒ ƒ Par contre, Par contre, à à chaque suppression, on dé chaque suppression, on d écale cale à à gauche TOUS les gauche TOUS les enregistrements

enregistrements

(sauf le premier)(sauf le premier)

! !

ƒ ƒ Malheureusement, le d Malheureusement, le dé écalage rend les manipulations de la file calage rend les manipulations de la file inefficace.

inefficace.

Katy Zach Alexia Nicolas Karen Patrick - - - -

0 1 2 3 4 5 6 7 8 9

Data 5

LastIn Queue

Patrick

Zach Alexia Nicolas Karen Patrick - - - -

0 1 2 3 4 5 6 7 8 9

Data 4

LastIn Queue

T1

T2

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (3/15) (3/15)

ƒ ƒ Une solution Une solution é él égante est de g gante est de gé érer le tableau comme une liste rer le tableau comme une liste circulaire.

circulaire.

ƒ

ƒ On ins On insè ère re à à la suite de la file et on incr la suite de la file et on incré émente l mente l’ ’indice de tête. indice de tête.

ƒ

ƒ À À chaque suppression chaque suppression on incr

on incré émente mente l

l’ ’indice de indice de queue.

queue.

ƒ ƒ Si l Si l’ ’un un ou l ou l’ ’autre autre d

épasse le passe le dernier

dernier é él ément ment physique du physique du tableau, on tableau, on recommence recommence à à 0. 0.

File -

- - -

- -

Nicolas Karen Pa

tric k

Alexia Zach Katy

7 6 8

11 10 9

5 4

3

0 1

2 0

FirstIn

5

LastIn

Queue

FirstIn

LastIn

(11)

© ÉTS - GPA - GPA665

21

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (4/15) (4/15)

ƒ ƒ Cet enroulement r Cet enroulement ré ésout les probl sout les problè èmes des tableaux tass mes des tableaux tassé és s à à droite droite ou du d

ou du dé écalage calage à à gauche. gauche.

ƒ

ƒ Le seul probl Le seul problè ème avec ces tableaux est de savoir si le tableau est me avec ces tableaux est de savoir si le tableau est vide ou s

vide ou s’ ’il est plein. il est plein.

Après suppression

dans un

tableau contenant un

seul élément

File -

Nicolas - -

- -

-

- -

- - -

7 6 8

11 10 9

5 4

3

0 1

2

Queue

FirstIn LastIn 7 FirstIn

7 LastIn

File -

- - -

- -

-

- -

- - -

7 6 8

11 10 9

5 4

3

0 1

2

Queue

LastIn FirstIn 8 FirstIn

7 LastIn

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (5/15) (5/15)

ƒ ƒ Dans les deux cas, l Dans les deux cas, l’ ’indexe indexe FirstIn FirstIn est une position devant l’ est une position devant l ’indexe indexe LastIn

LastIn. .

ƒ

ƒ Une solution simple consiste Une solution simple consiste à à maintenir un compteur du nombre maintenir un compteur du nombre d d’ ’enregistrements pr enregistrements pré ésent dans la file. sent dans la file.

File Katy

- Maria Zach

Ale xia

Joh n

Mike Karl Steph

an

Ben Patrick Karen

7 6 8

11 10 9

5 4

3

0 1

2

Queue

FirstIn

LastIn 8 FirstIn

6

LastIn

Après

insertion dans un tableau

contenant t - 1 éléments

où test la taille du tableau

File Katy

Carol Maria Zach

Ale xia

Joh n

Mike Karl Steph

an

Ben Patrick Karen

7 6 8

11 10 9

5 4

3

0 1

2

Queue

FirstIn

LastIn 8 FirstIn

7 LastIn

(12)

© ÉTS - GPA - GPA665

23

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (6/15) (6/15)

Avec ce mode d

Avec ce mode d’ ’impl implé émentation, on d mentation, on dé éfinit le TDA file finit le TDA file comme suit :

comme suit :

ƒ

ƒ on utilise un tableau statique; on utilise un tableau statique;

ƒ

ƒ on utilise deux indexes pour la file on utilise deux indexes pour la file (un indexe indiquant le premier (un indexe indiquant le premier enregistrement ins

enregistrement insé ér é et un deuxiè et un deuxi ème indexe indiquant le dernier ins me indexe indiquant le dernier insé ér é) ) . .

ƒ

ƒ on utilise un compteur du nombre d on utilise un compteur du nombre d’ ’enregistrements dans la file enregistrements dans la file

ƒ ƒ En fait, les fonctions de cré En fait, les fonctions de cr éation et de destruction ont un ation et de destruction ont un rôle d

rôle d’ ’initialisation seulement car c initialisation seulement car c’ ’est le compilateur est le compilateur qui se charge de l

qui se charge de l’ ’allocation m allocation mé émoire de toute la file. moire de toute la file.

ƒ ƒ La fonction de cré La fonction de cr éation a le rôle d ation a le rôle d’ ’initialiser initialiser correctement les deux indexes et le compteur correctement les deux indexes et le compteur

(pour assurer la coh

(pour assurer la cohé érence de la liste d rence de la liste dè ès le d s le dé épart) part) . .

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (7/15) (7/15) 1. 1. D éclaration du type n claration du type né écessaire cessaire à à la file. la file.

2. 2. Fonction de cr Fonction de cré éation de la liste ation de la liste (qui consiste (qui consiste à à initialiser les diffé initialiser les diff érentes rentes variables de contrôle)

variables de contrôle) . .

void Create(SQueue *Queue) {

Queue->LastIn = MAXQUEUESIZE - 1;

Queue->FirstIn = 0;

Queue->Count = 0;

}

#define MAXQUEUESIZE 100

#define STRLENGTH 25 typedef struct {

char Data[MAXQUEUESIZE][STRLENGTH];

int FirstIn;

int LastIn;

int Count;

} SQueue;

(13)

© ÉTS - GPA - GPA665

25

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (8/15) (8/15) 3.

3. Fonction questionnant la file Fonction questionnant la file à à savoir si elle est vide. savoir si elle est vide.

4. 4. Fonction retournant le premier enregistrement de la file. Fonction retournant le premier enregistrement de la file.

char* QueueFront(SQueue *Queue) {

if (IsEmpty(Queue)) { return NULL;

} else {

return Queue->Data[Queue->FirstIn];

} }

int IsEmpty(SQueue *Queue) {

return (Queue->Count == 0) ? 1 : 0;

}

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (9/15) (9/15)

5. 5. Fonction d Fonction d’ ’insertion ( insertion ( exemple : ajouter l’ exemple : ajouter l ’enregistrement Alexia) enregistrement Alexia) 1. 1. Description logique. Cette fonction s Description logique. Cette fonction s’ ’effectue en 4 op effectue en 4 opé érations : rations :

Puisqu

Puisqu’ ’on conna on connaî ît la position d t la position d’ ’insertion insertion

(toujours (toujours ààla fin)la fin)

, aucune recherche de , aucune recherche de position n

position n’ ’est n est né écessaire. cessaire.

§

§

s’ s ’assurer qu assurer qu’ ’il reste au moins un espace de libre dans le tableau; il reste au moins un espace de libre dans le tableau;

§

§

ajuster les indexes; ajuster les indexes;

File -

- - -

- -

Nicolas Karen

- Patrick Zach Katy

7 6 8

11 10 9

5 43

0 1

2 0

FirstIn

4 LastIn Queue

FirstIn

5 Count

LastIn

File -

- - -

- -

Nicolas Karen

- Patrick Zach Katy

7 6 8

11 10 9

5 43

0 1

2 0

FirstIn

5 LastIn Queue

FirstIn

5 Count

LastIn

1

1 2 2

(14)

© ÉTS - GPA - GPA665

27

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (10/15) (10/15) 5.

5. Fonction d Fonction d’ ’insertion insertion (suite) (suite) 1.

1. Description logique Description logique

(suite)(suite)

. . 3.

3. copier les donné copier les donn ées dans le nouvel enregistrement; es dans le nouvel enregistrement;

4.

4. ajuster la variable de comptage. ajuster la variable de comptage.

File -

- - -

- -

Nicolas Karen

Patrick Zach Katy

7 6 8

11 10 9

4 3

0 1

2 0

FirstIn

5 LastIn Queue

FirstIn

5 Count

LastIn Alex

ia 5

File -

- - -

- -

Nicolas Karen

Patrick Zach Katy

7 6 8

11 10 9

4 3

0 1

2 0

FirstIn

5 LastIn Queue

FirstIn

6 Count

LastIn Alex

ia 5

3

3 4 4

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (11/15) (11/15)

5. 5. 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 au moins un espace de libre dans le tableau; il reste au moins un espace de libre dans le tableau;

2.

2. ajuster les indexes; ajuster les indexes;

3.

3. copier les donné copier les donn ées dans le nouvel enregistrement; es dans le nouvel enregistrement;

4.

4. ajuster la variable de comptage. ajuster la variable de comptage.

LastIn = LastIn + 1 (en considérant le tableau circulaire) int Add(SQueue *Queue, char NewValue[])

Count = Count + 1

Count < Taille physique du tableau

La chaîne de caractères à l’indexe LastIn = NewValue

(15)

© ÉTS - GPA - GPA665

29

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (12/15) (12/15) 5.

5. Fonction d Fonction d’ ’insertion insertion (suite) (suite) 4.

4. É Écriture finale du code en langage C criture finale du code en langage C

int Add(SQueue *Queue, char NewValue[]) {

/* S'assure qu'il reste dans la place dans le tableau */

if (Queue->Count < MAXQUEUESIZE) {

Queue->LastIn = (Queue->LastIn + 1) % MAXQUEUESIZE;

strcpy(Queue->Data[Queue->LastIn], NewValue);

Queue->Count++;

return 1;

} else { return 0;

} }

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (13/15) (13/15)

6. 6. Fonction de suppression Fonction de suppression

1. 1. Description logique. Cette fonction s Description logique. Cette fonction s’ ’effectue en 3 op effectue en 3 opé érations : rations : Puisqu

Puisqu’ ’on conna on connaî ît la position de suppression t la position de suppression

(toujours au d(toujours au déébut)but)

, aucune recherche , aucune recherche de position n

de position n’ ’est n est né écessaire. cessaire.

1.

1. s’ s ’assurer qu assurer qu’ ’il y a au moins un enregistrement dans le tableau; il y a au moins un enregistrement dans le tableau;

2.

2. ajuster les indexes; ajuster les indexes;

3. 3. ajuster la variable de comptage ajuster la variable de comptage

1 1 2 et 3 2 et 3

File -

- - Franck

Maria Eric

k

Van Karen

Robert Alexia Patrick

7 6 8

11 10 9

43

0 1

2 9

FirstIn

4 LastIn Queue

8

Count -

5

LastIn FirstIn

File Christ

- - Franck

Maria Eric

k

Van Karen

Robert Alexia Patrick

7 6 8

11 10 9

43

0 1

2 8

FirstIn

4 LastIn Queue

9

Count -

5

LastIn FirstIn

(16)

© ÉTS - GPA - GPA665

31

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (14/15) (14/15) 6.

6. 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 y a au moins un enregistrement dans le tableau; il y a au moins un enregistrement dans le tableau;

2. 2. ajuster les indexes; ajuster les indexes;

3. 3. ajuster la variable de comptage. ajuster la variable de comptage.

FirstIn = FirstIn + 1 (en considérant le tableau circulaire) int Remove(SQueue *Queue)

Count = Count - 1 Si NON(IsEmpty)

Implémentation d’une file par un tableau statique Implémentation d’une file par un tableau statique (15/15) (15/15)

6. 6. Fonction d Fonction d’ ’insertion insertion (suite) (suite)

4. 4. É Écriture finale du code en langage C criture finale du code en langage C

int Remove(SQueue *Queue) {

/* S'assure qu'il reste au moins un enregistrement dans la file */

if (IsEmpty(Queue)) { return 0;

} else {

Queue->FirstIn = (Queue->FirstIn + 1) % MAXQUEUESIZE;

Queue->Count--;

return 1;

} }

(17)

© ÉTS - GPA - GPA665

33

Pile Pile

Sassia Christ Ken Mike Alexia Karen

04:16 07:37 11:35 15:48 15:53 19:02 Stack Nicolas

Ö

Katy Ö

Ben Ö

Alexia Ö

Karen Ö Ö

Stack

Définition d’une pile Définition d’une pile (1/3) (1/3)

ƒ ƒ Selon le Selon le Dictionnaire de l Dictionnaire de l’ ’informatique informatique de de Larousse Larousse, une pile se , une pile se d éfinit comme suit : finit comme suit :

ƒ

ƒ File gé File g ér ée selon la m e selon la mé éthode du dernier entr thode du dernier entré é, premier sorti. , premier sorti.

ƒ ƒ Ainsi, une pile correspond Ainsi, une pile correspond à à une liste dont les donn une liste dont les donné ées sont es sont organis

organisé ées suivant le mode d es suivant le mode d’ ’organisation par position. organisation par position.

ƒ ƒ Cette organisation par position se traduit par l Cette organisation par position se traduit par l’ ’acronyme suivant : acronyme suivant : LIFO (

LIFO (Last Last In In – First First Out). Out).

ƒ

ƒ En anglais : pile = En anglais : pile = s stack tack. .

Schéma d’une pile (Classement selon l’heure d’arrivée)

Sassia Christ Ken Mike Alexia Karen

04:16 07:37 11:35 15:48 15:53 19:02 Stack

(18)

© ÉTS - GPA - GPA665

35

Définition d’une pile Définition d’une pile (2/3) (2/3)

ƒ ƒ Le comportement du TDA pile permet de mod Le comportement du TDA pile permet de modé éliser liser certaines structures du monde r

certaines structures du monde ré éel telles que : el telles que :

ƒ

ƒ des empilements de stock; des empilements de stock;

ƒ ƒ la gestion de certains services informatiques la gestion de certains services informatiques (comme les appels de (comme les appels de fonctions)

fonctions) ; ;

ƒ

ƒ . .

ƒ ƒ La d La dé éfinition même de la pile indique quel doit être le finition même de la pile indique quel doit être le comportement de cette derni

comportement de cette derniè ère : re :

ƒ ƒ l’ l ’insertion d insertion d’ ’un enregistrement doit se faire au d un enregistrement doit se faire au dé ébut de la liste; but de la liste;

ƒ ƒ la suppression d’ la suppression d ’un enregistrement doit se faire au d un enregistrement doit se faire au dé ébut de la but de la liste;

liste;

ƒ

ƒ comme l’ comme l ’insertion et la suppression, la consultation d insertion et la suppression, la consultation d’ ’un un enregistrement se fait au d

enregistrement se fait au dé ébut de la liste. but de la liste.

Définition d’une pile Définition d’une pile (3/3) (3/3)

ƒ

ƒ D éfinition des services d finition des services d’ ’une pile une pile

ƒ

ƒ Cr Cré éer une pile vide er une pile vide Create( Create (… …) )

ƒ ƒ D éterminer si la pile est vide terminer si la pile est vide IsEmpty( IsEmpty (… …) )

ƒ ƒ Ins Insé érer un enregistrement dans la pile rer un enregistrement dans la pile Push( Push (… …) ) (insertion en queue de liste)

(insertion en queue de liste)

ƒ ƒ Supprimer un enregistrement de la pile Supprimer un enregistrement de la pile Pop(… Pop( …) ) (suppression en tête de liste)

(suppression en tête de liste)

ƒ ƒ Consulter un enregistrement de la pile Consulter un enregistrement de la pile StackTop( StackTop (… …) ) (consultation en tête de liste)

(consultation en tête de liste)

ƒ ƒ Un axiome pour les piles : Un axiome pour les piles :

Pop(Push Pop( Push( (Stack Stack,I)) = ,I)) = Stack Stack

(19)

© ÉTS - GPA - GPA665

37

Implémentation d’une pile par une liste chaînée Implémentation d’une pile par une liste chaînée (1/11) (1/11)

ƒ ƒ Encore une fois, on peut se demander quelle est la Encore une fois, on peut se demander quelle est la structure la plus ad

structure la plus adé équate pour une telle quate pour une telle implé impl émentation. mentation.

ƒ ƒ Puisqu Puisqu’ ’on d on dé ésire toujours ins sire toujours insé érer et supprimer au d rer et supprimer au dé ébut de la but de la liste, une liste cha

liste, une liste chaî în ée standard convient parfaitement. e standard convient parfaitement.

ƒ ƒ La fonction de cré La fonction de cr éation a le rôle d ation a le rôle d’ ’initialiser initialiser correctement le pointeur de tête

correctement le pointeur de tête à à une valeur nulle une valeur nulle

(pour ainsi assurer la coh

(pour ainsi assurer la cohé érence de la liste d rence de la liste dè ès le d s le dé épart) part) . .

ƒ

ƒ La fonction de destruction quant à La fonction de destruction quant à elle, doit s elle, doit s’ ’assurer de assurer de tout lib

tout libé érer la m rer la mé émoire pr moire pré éalablement allou alablement alloué ée pour la e pour la pile.

pile.

Nicolas Ö

Katy Ö

Ben Ö

Alexia Ö

Karen Ö Ö

Stack

Implémentation d’une pile par une liste chaînée Implémentation d’une pile par une liste chaînée (2/11) (2/11) 1. 1. D éclaration du type n claration du type né écessaire cessaire à à la file. la file.

2. 2. Fonction questionnant la file Fonction questionnant la file à à savoir si elle est vide. savoir si elle est vide.

3. 3. 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 Create(SStack *pStack) {

*pStack = NULL;

}

#define STRLENGTH 25 typedef struct _node { char Data[STRLENGTH];

struct _node *Next;

} SNode;

typedef SNode* SStack;

int IsEmpty(SStack pStack) {

return (pStack == NULL) ? 1 : 0;

}

Références

Documents relatifs

Correction Devoir de mathématiques Classe : 2d 4 n°1.A : sur les fonctions affines et généralités... Correction Devoir de mathématiques Classe : 2d 4 n°1.B : sur les

L’exemple suivant montre la déclaration d’une variable de type pointeur de fonction qui doit retourné un entier nommé pFonction1 et d’une fonction retournant

Propriété : La représentation de la fonction affine ( ) est une droite parallèle à la représentation graphique de la fonction linéaire

Exercice/Exemple : lecture graphique des équations des deux asymptotes, coordonnées du centre de symétrie Conseil et méthode : tracer les asymptotes si elles ne sont pas

Déterminer le nombre minimal de pièces à fabriquer pour que le coût moyen de fabrication d’une pièce soit inférieur ou égal à 1, 50 euro.. Est-il possible que le coût moyen

2 Text messaging is an efficient method of communication for people with a busy ……….. 3 This mobile phone has got a special ……… that gives me directions

Notre algorithme prévoit le cas où a &lt; b car on n'impose rien sur les entiers mais notre programme Algobox n'a pas codé cela en estimant qu'on entrerait toujours un

Le présent document décrit l'en-tête MIME Content-Duration qui est destiné à être utilisé avec tout contenu de support qui varie avec le temps (normalement audio/* ou