Section courante

A propos

Section administrative du site

Introduction

La pile est basé sur l'idée qu'on a une suite de donnée, dans lequel on ajoute un nouvel élément à la fin de cette suite de données, et lorsqu'on enlève une données, c'est toujours la dernière ayant été rajouté allant être enlevé la première. Les anglais surnomment cette technique LIFO, soit Last In First Out, soit le dernier entrée, le premier sortie !

Pile avec un tableau

Il y a deux techniques pour effectuer une pile, la première est effectué à l'aide d'une structure statique (un tableau). Elle est limité à un espace mémoire prédéfinit mais est très rapide. On utilise cette algorithme pour la pile des microprocesseur.

Soit «t» est la position des éléments dans la pile, la variable «N» indique le nombre maximum d'éléments dans la pile et la variable «S» représente le tableau de la pile. Voici son algorithme :

MODULE taille
   RETOURNER t + 1

MODULE estVide
   RETOURNER t < 0

MODULE haut
   SI estVide ALORS
      ERREUR "La pile est vide"
   FIN SI
   RETOURNER S[t]

MODULE empile(objet)
   SI taille = N ALORS
      ERREUR "Débordement de la pile"
   FIN SI
   tt + 1
   S[t] ← objet

MODULE depiler(objet)
   SI estVide ALORS
      ERREUR "La pile est vide"
   FIN SI
   eS[t]
   S[t] ← NIL
   tt - 1
   RETOURNER e

Exemple

L'exemple suivant, écrit en langage de programmation C, permet de créer une pile de nombre entier avec un tableau :

Essayer maintenant !
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define N 25
  5.  
  6. int S[N]; 
  7. int t = 0; 
  8.  
  9. int isEmpty() {
  10.      return t = 0;
  11. }
  12.  
  13. int top() {
  14.     if(isEmpty()) {
  15.           puts("La pile est vide");
  16.           exit(255);
  17.     }
  18.      return S[t];
  19. }
  20.  
  21. void push(int item) {
  22.    if(t == N) {
  23.              puts("Débordement de la pile");
  24.              exit(255);
  25.    }
  26.    S[t] = item;
  27.    t++;
  28. } 
  29.  
  30. int pop() {
  31.    t--;
  32.    return S[t];
  33. } 
  34.  
  35. int main(void) {
  36.      push(1);
  37.      push(2);
  38.      push(3);
  39.      printf("Depile A : %i\n",pop());
  40.      printf("Depile B : %i\n",pop());
  41.      printf("Depile C : %i\n",pop());
  42. }

on obtiendra le résultat suivant :

Depile A : 3
Depile B : 2
Depile C : 1

Pile avec une liste chaîné simple

La seconde technique consiste à utiliser une liste chainé simple. Ainsi, chaque nouvelle élément sera ajouté dans la mémoire dynamique. Bien que les performances soit moins rapide, elle est de loin préférable à la première technique car elle offre un nombre illimité d'élément dans le tableau. On utilise cette technique dans les piles intégré aux langages de programmation. Voici son algorithme :

MODULE taille
   RETOURNER t + 1

MODULE estVide
   RETOURNER t < 0

MODULE haut
   SI estVide ALORS
      ERREUR "La pile est vide"
   FIN SI
   RETOURNER haut.element

MODULE empile(objet)
   n ← nouveau Noeud
   n.element ← objet
   n.prochainNoeud(haut)
   haut ← n
   tt + 1

MODULE depiler(objet)
   SI estVide ALORS
      ERREUR "La pile est vide"
   FIN SI
   e ← haut.element
   haut ← haut.demandeProchain()
   tt - 1
   RETOURNER e


Dernière mise à jour : Vendredi, le 21 avril 2017