/**
* On réalise (implémente) une pile à l'aide d'un tableau (taille fixe
* donc capacité limitée pour la pile).
* Le tableau est donc logiquement (logiciellement) coupé en deux parties.
* Les premières cases qui contiennent dans l'ordre les éléments empilés,
* les cases qui suivent (les dernières donc) sont simplement des
* réceptacles (emplacements) pour les futurs valeurs qui seront empilés.
* Le découpage est obtenu à l'aide d'une variable annexe qui est
* l'indice du tableau correspondant à la coupure logique.
*/
public class Pile {
static int []tableau = new int[100]; // On essaie avec 100 entiers...
static int sommetDePile = 0; // La « coupure », indice du premier emplacement « vide »
/**
* Une fonction permettant d'afficher la partie utile de la pile
*/
public static void affichePile() {
System.out.print("Il y a "+sommetDePile+" éléments dans la pile :");
for (int i=0; i<sommetDePile; i++) System.out.print(tableau[i]+":");
System.out.println();
}
public static void main(String []a) {
affichePile();
// push(1) : on simule un push
tableau[sommetDePile] = 1;
sommetDePile++;
affichePile();
// push(10) : on simule un autre push
tableau[sommetDePile] = 10;
sommetDePile++;
affichePile();
// pop : on simule un pop
sommetDePile--;
int valeur = tableau[sommetDePile];
affichePile();
// afichage du résultat...
System.out.println("Il y avait "+valeur+" en sommet de pile");
// utilisation des fonctions annexes push/pop (voir plus bas)
push(23);
System.out.println("Il y avait "+pop()+" en sommet de pile");
}
/**
* On peut donc écrire les opérations d'empilement/dépilement comme
* fonctions
*/
public static void push(int v) {
tableau[sommetDePile] = v;
sommetDePile++;
}
public static int pop() {
sommetDePile--;
return tableau[sommetDePile];
}
}