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