/*
* 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);
}
}