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