/** * Soultion possible de la demonstration 8 * * @author felipe IFT1010 * @version 15 mars 2002 * */ public class MaPile { private SeResumeAUnDouble [] pile; // pour simuler une pile private int taille; // taille maximale private int sommet=0; // l'indice du sommet de pile (le premier indice libre) /** * Une methode de service qui echange les valeurs pile[a] et pile[b] * @param a indice dans la table pile * @param b indice dans la table pile * @return true tout le temps */ private boolean swap(int a, int b) { SeResumeAUnDouble temp = pile[a]; // note: ce ne sont que des references a des objets qui ne sont pas modifies pile[a] = pile[b]; pile[b] = temp; return true; } /* * constructeurs */ public MaPile(int taille) { pile = new SeResumeAUnDouble [this.taille=taille];} // ne cree pas les objets mais juste la table ! public MaPile() {this(100);} // default value si l'utilisateur n'a rien specifie (pas impose) /** * Empile un objet * @param ref une reference sur l'objet a ajouter * @return true si l' operation a pu etre effectuee */ public boolean empile (SeResumeAUnDouble ref) { if (sommet == taille) { System.err.println("PILE DEJA PLEINE"); return false; } // l' ajout est possible pile[sommet++] = ref; return true; } /** * Depile un objet * @return La reference sur l'objet depile */ public SeResumeAUnDouble depile() { if (sommet == 0) { System.err.println("PILE VIDE"); return null; } // la pile n'est pas vide // ceci pourrait fonctionner: return pile[--sommet]; // mais dans l'espoir d'aider le gestionnaire de memoire (pas grave si vous ne comprenez pas exactement la difference) // voici un autre code qui fait l'affaire: SeResumeAUnDouble ref = pile[--sommet]; pile[sommet] = null; // la pile ne pointe plus sur l'objet return ref; } /** * @return le nombre d'elements dans la pile */ public int size() {return sommet;} /** * @return la taille maximale de la pile */ public int capacity() {return taille;} /** * Affichage des elements de la pile */ public String toString() { String res = ""; for (int i=0; i pile[i+1].convertToDouble()) bulle = swap(i,i+1); fin--; } while (bulle); } }