



Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Cour sur les pile algorithmique
Typology: Lecture notes
1 / 6
This page cannot be seen from the preview
Don't miss anything!




Cours Algorithmique 2 Chapitre 03 : Les Piles
I. Principe La pile est une structure très utilisée en informatique, surtout dans les langages de programmation (appel de procédures, calcul des expressions arithmétiques,...). Les piles ne sont pas de nouveaux types de données mais plutôt une manière de gérer un ensemble de données. La pile est une liste ordonnée sans fin d’éléments dans laquelle on ne peut introduire ou enlever un élément qu'à une extrémité appelée tête de pile ou sommet de pile. Noter que dans une pile, le dernier élément inséré sera le premier à être supprimé, retiré : on parle de liste LIFO ‘Last In First Out’ (En anglais : pile = stack). Elles sont très souvent utiles et servent, entre autres, à mémoriser des évènements en attente de traitement. Il n'y a pas de structures spécifiques prévues dans les langages de programmation pour les piles. Il faut donc les créer de toute pièce sachant que la représentation en mémoire de ces structures de données peut être, selon le besoin, statique (utilisation des tableaux) ou dynamique (utilisation des listes). Lorsqu’une structure de données est manipulée selon la stratégie Pile, alors les deux opérations d’ajout et de récupération se font uniquement en tête de la pile, appelé aussi le sommet de la pile. Autrement dit, le seul élément accessible est le premier élément.
Cours Algorithmique 2 Chapitre 03 : Les Piles Exemple une pile de livres, une pile d’assiettes, une pile à un jeu de cartes si l’on se refuse le droit de manipuler plus d’un de leurs éléments à la fois. Figure 13 : pile d’assiette II. Opérations sur les piles En informatique une pile sert essentiellement à stocker des données qui ne peuvent pas être traitées immédiatement, car le programme à une tâche plus urgente ou préalable à accomplir auparavant. En particulier les appels et retours de fonctions sont gérés grâce à une pile appelée pile d'exécution. Les opérations habituelles sur les piles sont : Init-Pile(P) : Initialisation de la pile (généralement à vide). Pile-Vide(P), Pile-Pleine : Vérification du contenu de la pile (pile pleine ou vide). Depiler (P) : Dépiler un objet de P, si elle n’est pas vide, consiste à supprimer de P l'objet placé au sommet (dans la pile d’assiettes seule peut être retirée celle qui se trouve au sommet). L'objet dépilé est retourné comme résultat du traitement(en anglais pop(P)). Empiler (P,x) : Empiler un objet sur une pile P, si elle n’est pas saturée, consiste à insérer cet objet au sommet de P (dans la pile d’assiettes une nouvelle assiette ne peut être ajoutée qu’au-dessus de celle qui se trouve au sommet)(en anglais push(P,x)). III. Modélisation et Implémentation des piles En termes de programmation, une pile est un enregistrement avec :
Cours Algorithmique 2 Chapitre 03 : Les Piles Remarque : Les données enregistrées dans la pile peuvent être des entiers, des réels, des caractères, des chaînes de caractères, des booléens, des tableaux. III.1.b Initialisation d’une pile Il s’agit d’initialiser le sommet à "-1" pour attester l’absence de valeurs dans la pile. void Init_Pile () {P.sommet = -1 ; } III.1.c Vérification de pile vide void Pile_vide ( ) { if( P.sommet = -1 ) printf("la pile est vide") ; else printf("la pile n’est pas vide") ;} III.1.d Vérification de pile pleine void Pile_pleine () { if (P.sommet = max-1) printf("la pile est pleine") ; else printf("la pile n’est pas pleine") ;} III.1.e Ajout d’une nouvelle valeur à une pile void push(int x) { if (P.sommet == max-1) {printf("erreur :pile pliene !") ; exit(1);} else{ P.sommet=P.sommet+1; P.tab[P.sommet]=x; }}
Cours Algorithmique 2 Chapitre 03 : Les Piles III.1.f Suppression d’une valeur de la pile int pop() { int x; if (P.sommet== -1) { printf("erreur :pile vide !") ; return 1 ; } else{x = P.tab[P.sommet]; P.sommet=P.sommet-1; return x;} } III. 2 Implémentation par des Listes chainées(Dynamique) Une pile dynamique est une liste à la quel on attache un pointeur sommet. C’est un enregistrement à une seule case : pointeur qui pointe la dernière valeur traitée dans la liste (sommet). L’implémentation dynamique utilise les listes linéaires chainées. Dans ce cas, la pile peut être vide, mais ne peut être jamais pleine, sauf bien sûr en cas d’insuffisance de l’espace mémoire. L’empilement et le dépilement dans les piles dynamiques se font à la tête de la Pile. III.2.a Déclaration La pile n’est rien qu’un pointeur vers le premier élément de la pile. Les donnes de la pile peuvent être de n’importe quel type : entier, réel, caractère, structure, tableau,… typedef struct Element{ int Info; struct Element *suiv; } PILED; PILED *P ; III.2.b Initialisation d’une pile PILED *sommet=NULL ; III.2.c Vérification de pile vide Il n’y a pas de pile pleine pour les piles dynamique. La seule possibilité de ne pas pouvoir ajouter un élément c’est d’avoir une mémoire pleine, cas que l’on ne prend pas en considération