1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

26
1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées

Transcript of 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

Page 1: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

1

PILES & FILES

Définition

Usage

Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 2: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

INTRODUCTION

Les piles et les files sont des objets couramment utilisés 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 gérés en mode pile,–Les travaux d'impression sur un système sont gérés en mode file.

2Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 3: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

APPLICATION

Les piles et les files seront introduites sous la forme de liste simplement chainées.

Les éléments (Telmt) contiennent un champ suivant (suiv) pour établir le lien avec le maillon suivant.

Une structure particulière (Tpile) ou la (Tfile), une par pile ou file permet d'accéder aux éléments.

3Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 4: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

4

MANIPULATIONS DES PILES

Définition

Empiler

Dépiler

Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 5: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

FONCTIONNEMENT D'UNE PILE

Une pile permet de gérer (stocker et retirer) des objets suivant des modalités particulières :

– Le dernier élément empilé estle premier dépilé. (Mode Last In First Out)

– L'analogie la plus courante est la pile d'assiettes.

5

Last

In

First

OutPILE

premier

Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 6: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

OPERATIONS SUR UNE PILE

Les fonctions suivantes sont mise en œuvre pour gérer 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);

6Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 7: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

ACCES A LA PILE

typedef struct

{ struct elt *premier;

} Tpile;

• La structure Tpile permet l'accès à la pile par son premier élément.

• le champ "premier" doit être mis à NULL lorsque la pile est vide (initialisation, enlèvement du dernier élément)

7Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 8: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

ANATOMIE D'UN ELEMENT

typedef int obj;

typedef struct elt

{ obj val ;

struct elt *suiv;

} Telt;

• Les objets gérés par la pile sont ici des entiers,

• La structure de liste simplement chainées est utilisée.

8Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 9: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

DECLARATION ET INITIALISATION D'UN PILE

Tpile PILE;

initPile(&PILE);

• En général la structure Tpile n'est pas allouée dynamiquement.

• Elle est déclarée en variable dans la fonction main.• Elle est passée par adresse à chaque fonction susceptible

de modifier le sommet de la pile.

9Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 10: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

INITIALISER ET TESTER LA PILEvoid 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;

}

10Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 11: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

EMPILERint 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;}

}

11Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 12: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

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

}

}

12Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 13: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

13

MANIPULATIONS DES FILES

Définition

Ajouter

Retirer

Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 14: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

FONCTIONNEMENT D'UNE FILE

Une file permet de gérer (stocker et retirer) des objets suivant des modalités particulières : •Le premier élément ajouté est le premier retiré (mode First In First Out).Nota : on ajoute à la fin, on retire en tête.

14

FILE

First In First Out

premier dernier

Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 15: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

OPERATIONS SUR UNE FILE

• Les fonctions suivantes sont mise en œuvre pour gérer 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);

15Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 16: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

ACCES A LA FILE

typedef struct

{ struct elt *premier;

struct elt *dernier;

} Tfile;• La structure Tfile permet de retirer un élément par le champ

premier.• La structure Tfile permet d'ajouter un élément par le champ

dernier.• les champs "premier" et "dernier" doivent être mis à NULL

lorsque la file est vide (initialisation, enlèvement du dernier élément)

16Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 17: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

ANATOMIE D'UN ELEMENT

typedef int obj;

typedef struct elt

{ obj val ;

struct elt *suiv;

} Telt;• On utilise les mêmes éléments que pour les piles. Seule la

structure d'accès diffère.• Les objets gérés par la file sont ici des entiers,• La structure de liste simplement chainée est utilisée.

17Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 18: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

DECLARATION ET INITIALISATION D'UN FILE

Tfile FILE;

initFile(&FILE);

• En général la structure Tfile n'est pas allouée dynamiquement.

• Elle est déclarée en variable dans la fonction main.• Elle est passée par adresse chaque fois qu'une fonction

est susceptible de la modifier.

18Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 19: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

INITIALISER ET TESTER LA FILEvoid 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;

}

19Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 20: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

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

}

20Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 21: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

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

}

}

21Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 22: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

22

FILES A PRIORITE

Définition

Ajouter

Retirer

Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 23: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

FILES A PRIORITE

Une file à priorité permet de gérer (stocker et retirer) des objets suivant des modalités particulières, on retire toujours l'élément de plus grande priorité. 1.Le pointeur dernier n'est plus nécessaire.2.On ajoute par ordre décroissant et on retire le premier élément,3.On ajoute en tête et on retire en recherchant le plus grand élément (plus compliqué à gérer).

23

10 8 6 3FILE A

PRIORITEpremier

Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 24: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

ANATOMIE D'UN ELEMENT

typedef int obj;

typedef struct eltpri

{ int priorite;

obj val;

struct eltpri *suiv;

} Teltpri;• On rajoute un champ priorite représentant la priorité de

l'élément.• La structure de liste reste une liste simplement chainée.

24Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 25: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

ACCES A LA FILE AVEC PRIORITE

typedef struct

{ int prioritemax;/*facultatif : initialisé à 0*/

struct eltpri *premier;

} Tfilepri;• Si la file est ordonnée prioritemax est mis à jour :

– à chaque ajout par simple comparaison avec la priorité de l'élément inséré.

– à chaque retrait en allant chercher la priorité du nouveau premier.

• Si la file n'est pas ordonnée, lors du retrait il faut terminer le parcours de la liste et chercher le nouveau plus grand.

25Ch. PAUL - Piles et Files à l'aide de listes chainées

Page 26: 1 PILES & FILES Définition Usage Ch. PAUL - Piles et Files à l'aide de listes chainées.

26

FIN DE PRESENTATION

Ch. PAUL - Piles et Files à l'aide de listes chainées