/* * Programme qui implémente une pile à l'aide d'un * tableau permettant de stocker les éléments et * d'un entier représentant la frontière entre les * emplacements actuellement occupés par des éléments * précédemment poussés sur la pile et les emplacements * libre sur lesquels on poussera les futurs éléments. */ public class MaPile { // Le tableau stockant les éléments, capacité max. 1000 public static int []tab = new int[1000]; // La variable "frontière" entre les occupés et // les libres public static int premierLibre = 0; // Fonction d'affichage // On affiche tous les éléments compris entre celui // d'indice 0 et celui d'indice indiqué par la // variable "frontière" public static void affiche() { System.out.print('['); for (int i=0; i<premierLibre; i++) { System.out.print(tab[i]+","); } System.out.println(']'); } // La pile est-elle vide ? // Elle est vide lorsque la "frontière" est l'élément // d'indice 0 public static boolean estVide() { return premierLibre==0; } // Fonction d'empilement de la valeur passée en // paramètre. // On copie la valeur dans le premier emplacement // libre du tableau et on déplace d'un cran // la frontière. public static void empile(int valeur) { tab[premierLibre] = valeur; premierLibre++; } // Fonction de dépilement, la valeur dépilée est // renvoyée en retour. // Déplacement d'un cran en arrière de la frontière // et renvoie immédiat de la valeur qui est // stockée à cet emplacement devenu libre. public static int depile() { premierLibre--; return tab[premierLibre]; } public static void main(String []args) { affiche(); // pile.push(45); // tab[premierLibre] = 45; // premierLibre++; empile(45); affiche(); // pile.push(88); // tab[premierLibre] = 88; // premierLibre++; empile(88); affiche(); empile(99); affiche(); while (!estVide()) { int i = depile(); System.out.println("J'ai enlevé "+i); affiche(); } // Mise en défaut de notre pile! // Notre pile a une capacité maximale.... for (int i=0; i<100000; i++) empile(i); } }