Documente Academic
Documente Profesional
Documente Cultură
INTRODUCTION
Les piles et les files sont des objets couramment utiliss en informatique :
Le mode de gestion d'une pile est LIFO : Last In First Out Le mode de gestion d'une file est FIFO : First In First Out
Exemples :
Les appels de fonction dans un programme sont grs en mode pile, Les travaux d'impression sur un systme sont grs en mode file.
Ch. PAUL - Piles et Files l'aide de listes chaines 2
17/05/2010
APPLICATION
Les piles et les files seront introduites sous la forme de liste simplement chaines. Les lments (Telmt) contient un champ suivant (suiv) pour tablir le lien avec le maillon suivant. Une structure particulire (Tpile) ou la (Tfile), une par pile ou file permet d'accder aux lments.
Ch. PAUL - Piles et Files l'aide de listes chaines 3
17/05/2010
In First Out
5
17/05/2010
ACCES A LA PILE
typedef struct { struct elt *premier; } Tpile; La structure Tpile permet l'accs la pile par son premier lment. le champ "premier" doit tre mis NULL lorsque la pile est vide (initialisation, enlvement du dernier lment)
Ch. PAUL - Piles et Files l'aide de listes chaines 7
17/05/2010
int pilevide(Tpile *P) /* retourne 1 si la pile est vide, 0 sinon*/ { if(P->premier == NULL) return 1; else return 0; }
Ch. PAUL - Piles et Files l'aide de listes chaines 10
17/05/2010
EMPILER
int empiler(Tpile *P, obj newVal) { Telt *E; if (pilepleine(P) == 1) { printf("\ntaille max atteinte, pas d'ajout \n"); return 0;} E = (Telt*) malloc(sizeof(Telt)); if (E == NULL) { printf("\nAjout impossible\n"); return 0;} else { E->val = newVal; E->suiv = P->premier; P->premier = E; return 1;} }
Ch. PAUL - Piles et Files l'aide de listes chaines 11
DEPILER
int depiler(Tpile *P, obj *theVal) { Telt *aSupp; if(pilevide(P)==1) { printf("\nPile vide\n"); return 0; } else { aSupp = P->premier; P->premier=P->premier->suiv; *theVal = aSupp->val; free(aSupp); return 1; } }
Ch. PAUL - Piles et Files l'aide de listes chaines 12
17/05/2010
First
In
First
Out
14
17/05/2010
15
ACCES A LA FILE
typedef struct { struct elt *premier; struct elt *dernier; } Tfile;
La structure Tfile permet de retirer un lment par le champ premier. La structure Tfile permet d'ajouter un lment par le champ dernier. les champs "premier" et "dernier" doivent tre mis NULL lorsque la file est vide (initialisation, enlvement du dernier lment)
Ch. PAUL - Piles et Files l'aide de listes chaines 16
17/05/2010
18
17/05/2010
AJOUTER
int ajouter(Tfile *F, obj newVal) { Telt *E; if (filepleine(F) ==1) { printf("\ntaille max atteinte, pas d'ajout"); return 0;} E = (Telt*) malloc(sizeof(Telt)); if (E == NULL){ printf("\nAjout impossible"); return 0;} else { E->val = newVal; E->suiv = NULL; if (filevide(F)==1) F->premier = E; else F->dernier->suiv = E; F->dernier = E;return 1; }
Ch. PAUL - Piles et Files l'aide de listes chaines 20
10
17/05/2010
RETIRER
int retirer(Tfile *F, obj *theVal) { Telt *aSupp; if(filevide(F)==1) { printf("\nFile vide\n"); return 0;} else { aSupp = F->premier; *theVal = aSupp->val; F->premier= aSupp->suiv; if (F->premier == NULL) F->dernier = NULL; free(aSupp); return 1; } }
Ch. PAUL - Piles et Files l'aide de listes chaines 21
FILES A PRIORITE
Dfinition Ajouter Retirer
Ch. PAUL - Piles et Files l'aide de listes chaines 22
11
17/05/2010
FILES A PRIORITE
Une file priorit permet de grer (stocker et retirer) des objets suivant des modalits particulires, on retire toujours l'lment de plus grande priorit. 1.Le pointeur dernier n'est plus ncessaire. 2.On ajoute par ordre dcroissant et on retire le premier lment, 3.On ajoute en tte et on retire en recherchant le plus grand lment (plus compliqu grer).
FILE A PRIORITE
premier
10
3
23
On rajoute un champ priorite reprsentant la priorit de l'lment. La structure de liste reste une liste simplement chaine.
Ch. PAUL - Piles et Files l'aide de listes chaines 24
12
17/05/2010
Si la file n'est pas ordonne, lors du retrait il faut terminer le parcours de la liste et chercher le nouveau plus grand.
Ch. PAUL - Piles et Files l'aide de listes chaines 25
FIN DE PRESENTATION
26
13