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
© É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
dé éfinit comme suit : finit comme suit :
Rangement par ordre chronologique, des é Rangement par ordre chronologique, des év 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.
© ÉTS - GPA - GPA665
5
Définition d’une file Définition d’une file (3/3) (3/3)
Dé 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 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
11Implé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 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 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 lé égante est d gante est d’ ’utiliser une liste circulaire, qui utiliser une liste circulaire, qui n 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
© É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 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 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 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;
}
© É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
© É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 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. 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
© É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
© É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 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. 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
© É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
© É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 problproblèè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 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
dé épasse le passe le dernier
dernier é él 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
© É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
© É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 ré é et un deuxiè et un deuxi ème indexe indiquant le dernier ins me indexe indiquant le dernier insé ér 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 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;
© É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
© É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 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 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
© É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
© É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 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 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;
} }
© É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 dé éfinit comme suit : finit comme suit :
File gé File g ér 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
© É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é 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 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
© É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 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 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;
}