Vous êtes sur la page 1sur 24

Piles et files

Exemples d’application des piles et files

Structures de données en C
Chap 3 : les piles et les files

Pr. Laila AMIR

Tronc commun MIPC

Année universitaire 2022/2023

Laila AMIR 1 / 24
Piles et files
Exemples d’application des piles et files

Plan

1 Piles et files
Les piles
Manipulation des piles
Implémentation d’une pile sous forme d’un tableau
Implémentation d’une pile sous forme d’une liste chaı̂née
Les files
Manipulation des files
Implémentation d’une file sous forme d’un tableau
Implémentation d’une file sous forme d’une liste chaı̂née

2 Exemples d’application des piles et files

Laila AMIR 2 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Outline

1 Piles et files
Les piles
Manipulation des piles
Implémentation d’une pile sous forme d’un tableau
Implémentation d’une pile sous forme d’une liste chaı̂née
Les files
Manipulation des files
Implémentation d’une file sous forme d’un tableau
Implémentation d’une file sous forme d’une liste chaı̂née

2 Exemples d’application des piles et files

Laila AMIR 3 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Définition

Les piles et les files sont des structures de données dynamiques.

Pour la gestion de ces structures, on utilise les trois opérations


élémentaires suivantes :
tester si la structure est vide.
ajouter un élément dans la structure.
retirer un élément de la structure.

Piles et files se distinguent par la relation entre éléments ajoutés et


éléments retirés.

Laila AMIR 4 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Les piles

Dans le cas des piles : c’est le dernier élément ajouté qui est retiré en
premier. On dit que la pile est une structure LIFO (last-in first-out).

Laila AMIR 5 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Manipulation des piles

Opérations de base sur les piles :

Pour insérer un élément dans une pile, on utilise l’opération


Empiler(élément)

Pour supprimer ou renvoyer un élément d’une pile, on utilise


l’opération Depiler().

L’élément supprimé est celui le plus récemment inséré.

Laila AMIR 6 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Manipulation des piles (suite)

Laila AMIR 7 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Implémentation d’une pile sous forme d’un tableau

Pour implémenter une pile (des réels par exemple) sous forme d’un
tableau, on utilise une structure de ce type :

typedef struct
{
int nb-elem; //nombre d’éléments dans la pile
int nb-elem-max; //nombre d’éléments maximum dans la pile
float *tab; //tableau contenant les éléments de la pile.
}Pile;

Laila AMIR 8 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Implémentation d’une pile sous forme d’un tableau (suite)

La fonction int Empiler(..) qui renvoie 1 en cas d’erreur et 0 dans le cas


contraire peut s’écrire comme suit :

int Empiler(Pile* p, float elem)


{
if (p->nb-elem >= p->nb-elem-max) //la pile est pleine
return 1; //on ne peut pas rajouter d’élément
else {
p->tab[p->nb-elem] = elem; //ajout d’un élément
p->nb-elem++; //incrémentation du nb-elem
return 0;
}
}

Laila AMIR 9 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Implémentation d’une pile sous forme d’un tableau (suite)

La fonction int Depiler(..) mémorise (renvoie) le sommet de la pile en cas


de pile non vide et elle renvoie 0, sinon elle renvoie 1 au cas d’erreur (pile
vide).

int Depiler (Pile* p, float *elem)


{
if ( (p->nb-elem==0) // la pile est vide
return 1; //on ne peut pas supprimer d’élément
else {
*elem = p->tab[p->nb-elem - 1] ;
p->nb-elem- -; //décrémentation du nb-elem
return 0;
}
}

Laila AMIR 10 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Implémentation d’une pile sous forme d’une liste chaı̂née

Pour implémenter une pile (des réels par exemple) sous forme d’une liste
chaı̂née, on utilise une structure de ce type :

typedef struct Cell


{
float donnee;
struct Cell *suivant; //pointeur sur la cellule suivante.
}TypeCellule;

typedef TypeCellule* Pile;

Laila AMIR 11 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Empiler

La fonction Empiler(Pile* p, float elem) est une focntion d’insertion en


tête de liste.
void Empiler(Pile* p, float elem)
{
Pile q;
q = (TypeCellule*)malloc(sizeof(TypeCellule));
q->donnee =elem; //ajout de l’élément à empiler
q->suivant =*p; //insertion en tête de la liste
*p = q; //mise à jour de la tête de la liste
}

Laila AMIR 12 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Depiler
La fonction Depiler supprime le sommet de la pile en cas de pile non vide
et elle renvoie 0, sinon elle renvoie 1 en cas d’erreur (pile vide).

int Depiler (Pile* p, float *elem)


{
Pile q;
if (estVide(*p)) // à faire
return 1;
else {
*elem = (*p)->donnee; //on renvoie l’élément de la tête;
q=*p; //mémorisation de l’adresse de la première cellule
*p = (*p)->suivant;
free(q);
return 0;
} }

Laila AMIR 13 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Les files

Dans le cas des files : c’est le premier élément ajouté qui est retiré en
premier. On dit que la pile est une structure FIFO (first-in first-out).

Laila AMIR 14 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Manipulation des files

Opérations de base sur les files :

Pour insérer un élément dans une file, on utilise l’opération


Enfiler(élément);

Pour supprimer ou renvoyer un élément d’une file, on utilise


l’opération Defiler().

L’élément supprimé est celui qui est resté le plus longtemps


dans la file.

Laila AMIR 15 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Manipulation des files (suite)

Laila AMIR 16 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Implémentation d’une file sous forme d’un tableau

Exercice de TP

Laila AMIR 17 / 24
Piles et files Les piles
Exemples d’application des piles et files Les files

Implémentation d’une file sous forme d’une liste chaı̂née

Exercice de TP

Laila AMIR 18 / 24
Piles et files
Exemples d’application des piles et files

Outline

1 Piles et files
Les piles
Manipulation des piles
Implémentation d’une pile sous forme d’un tableau
Implémentation d’une pile sous forme d’une liste chaı̂née
Les files
Manipulation des files
Implémentation d’une file sous forme d’un tableau
Implémentation d’une file sous forme d’une liste chaı̂née

2 Exemples d’application des piles et files

Laila AMIR 19 / 24
Piles et files
Exemples d’application des piles et files

Exemple 1 : évaluation du calcul arithmétique

Soit l’expression :

5 * (((9+8) * (4 * 6)) + 7)

On empile les nombres


On dépile lorsqu’une parenthèse se ferme et on exécute l’opération
On empile le résultat
Lorsque la pile ne contient plus qu’un seul élément c’est la solution.

Laila AMIR 20 / 24
Piles et files
Exemples d’application des piles et files

Exemple 1 : évaluation du calcul arithmétique (suite)

void compute ( ) {
Empiler( 5 ) ;
Empiler ( 9 ) ;
Empiler ( 8 ) ;
Empiler ( Depiler ( ) + Depiler ( ) ) ;
Empiler ( 4 ) ;
Empiler ( 6 ) ;
Empiler ( Depiler ( ) * Depiler ( ) ) ;
Empiler ( Depiler ( ) * Depiler ( ) ) ;
Empiler ( 7 ) ;
Empiler ( Depiler ( ) + Depiler ( ) ) ;
Empiler ( Depiler( ) * Depiler ( ) ) ;
printf ( ”la solution est : %f :”, Depiler ( ) ) ;
}

Laila AMIR 21 / 24
Piles et files
Exemples d’application des piles et files

Exemple 2 : notation polonaise

Calcul arithmétique : une application courante des piles se fait dans le


calcul arithmétique.

L’ordre dans la pile permet d’éviter l’usage des parenthèses. La


notation postfixée (polonaise) consiste à placer les opérandes
devant l’opérateur.

La notation infixée (parenthèsée) consiste à entourer les opérateurs


par leurs opérandes.

Laila AMIR 22 / 24
Piles et files
Exemples d’application des piles et files

Exemple 2 : notation polonaise (suite)

La façon standard d’écrire les expressions est dite ”infixée”.

5 * (((9+8) * (4 * 6)) + 7)

On peut réécrire toute expression infixée en une notation telle que les
opérandes apparaissent d’abord et les opérateurs après, exemple :

5 9 8 + 4 6 * * 7 + *.

Notation dite ”postfixée” ou Polonaise inverse, popularisée par les


calculateurs.
Conversion infixée / postfixée facile, avec une pile

Laila AMIR 23 / 24
Piles et files
Exemples d’application des piles et files

Exemples d’application d’une file

Impression de programmes : maintenir une file de programmes en


attente d’impression,

Ordonnanceur (dans les systèmes d’exploitation) : maintenir une file


de processus en attente d’un temps machine.

Laila AMIR 24 / 24

Vous aimerez peut-être aussi