Sunteți pe pagina 1din 13

17/05/2010

PILES & FILES


Dfinition Usage

Ch. PAUL - Piles et Files l'aide de listes chaines

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

MANIPULATIONS DES PILES


Dfinition Empiler Dpiler
Ch. PAUL - Piles et Files l'aide de listes chaines 4

17/05/2010

FONCTIONNEMENT D'UNE PILE


Une pile permet de grer (stocker et retirer) des objets suivant des modalits particulires : Last
Le dernier lment empil est le premier dpil. (Mode Last In First Out) L'analogie la plus courante est la pile d'assiettes. PILE
premier
Ch. PAUL - Piles et Files l'aide de listes chaines

In First Out
5

OPERATIONS SUR UNE PILE


Les fonctions suivantes sont mise en uvre pour grer une pile :
void initPile(Tpile *P); int empiler(Tpile *P, obj newVal); int depiler(Tpile *P, obj *theVal); int pilevide(Tpile *P); int pilepleine(Tpile *P);

Ch. PAUL - Piles et Files l'aide de listes chaines

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

ANATOMIE D'UN ELEMENT


typedef int obj; typedef struct elt { obj val ; struct elt *suiv; } Telt; Les objets grs par la pile sont ici des entiers, La structure de liste simplement chaines est utilise.
Ch. PAUL - Piles et Files l'aide de listes chaines 8

17/05/2010

DECLARATION ET INITIALISATION D'UN PILE


Tpile PILE; initPile(&PILE); En gnral la structure Tpile n'est pas alloue dynamiquement. Elle est dclare en variable dans la fonction main. Elle est passe par adresse chaque fonction susceptible de modifier le sommet de la pile.

Ch. PAUL - Piles et Files l'aide de listes chaines

INITIALISER ET TESTER LA PILE


void initPile(Tpile *P) { P->premier = NULL; }

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

MANIPULATIONS DES FILES


Dfinition Ajouter Retirer
Ch. PAUL - Piles et Files l'aide de listes chaines 13

FONCTIONNEMENT D'UNE FILE


Une file permet de grer (stocker et retirer) des objets suivant des modalits particulires : Le premier lment ajout est le premier retir (mode First In First Out). Nota : on ajoute la fin, on retire en tte. FILE
premier dernier

First

In

First

Out
14

Ch. PAUL - Piles et Files l'aide de listes chaines

17/05/2010

OPERATIONS SUR UNE FILE


Les fonctions suivantes sont mise en uvre pour grer une file : void initFile(Tfile *F); int ajouter(Tfile *F, obj newVal); int retirer(Tfile *F, obj *theVal); int filevide(Tfile *F); int filepleine(Tfile *F);

Ch. PAUL - Piles et Files l'aide de listes chaines

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

ANATOMIE D'UN ELEMENT


typedef int obj; typedef struct elt { obj val ; struct elt *suiv; } Telt; On utilise les mmes lments que pour les piles. Seule la structure d'accs diffre. Les objets grs par la file sont ici des entiers, La structure de liste simplement chaine est utilise.
Ch. PAUL - Piles et Files l'aide de listes chaines 17

DECLARATION ET INITIALISATION D'UN FILE


Tfile FILE; initFile(&FILE); En gnral la structure Tfile n'est pas alloue dynamiquement. Elle est dclare en variable dans la fonction main. Elle est passe par adresse chaque fois qu'une fonction est susceptible de la modifier.

Ch. PAUL - Piles et Files l'aide de listes chaines

18

17/05/2010

INITIALISER ET TESTER LA FILE


void initFile(Tfile *F) { F->premier = NULL; F->dernier = NULL; } int filevide(Tfile *F) /* retourne 1 si la file est vide, 0 sinon*/ { if (F->premier == NULL) return 1; else return 0; }
Ch. PAUL - Piles et Files l'aide de listes chaines 19

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

Ch. PAUL - Piles et Files l'aide de listes chaines

ANATOMIE D'UN ELEMENT


typedef int obj; typedef struct eltpri { int priorite; obj val; struct eltpri *suiv; } Teltpri;

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

ACCES A LA FILE AVEC PRIORITE


typedef struct { int prioritemax;/*facultatif : initialis 0*/ struct eltpri *premier; } Tfilepri;

Si la file est ordonne prioritemax est mis jour :


chaque ajout par simple comparaison avec la priorit de l'lment insr. chaque retrait en allant chercher la priorit du nouveau premier.

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

Ch. PAUL - Piles et Files l'aide de listes chaines

26

13

S-ar putea să vă placă și