import java.util.*;
/**
* Effet: Pile générique implantée dans une liste chaînée
*
* @author Peter DAEHNE
* @version Version 1.0
*/
public class PileListe <T> implements Pile<T> {
private static class Liste<T> {
T x; Liste<T> next;
Liste (T x, Liste<T> next) {this.x=x;this.next = next;}
}// Liste
private Liste<T> first = null;/* Le premier de la liste chaînée dans laquelle on stocke les éléments */
private int nbElem = 0; /* Le nombre d'éléments de la liste */
public void push (T x) {first = new Liste<T>(x, first); nbElem++;}
public T pop () {T res = first.x; first = first.next; nbElem--; return res;}
public T top () {return first.x;}
public boolean isEmpty () {return first == null;}
public int nbElem () {return nbElem;}
}// PileListe
/**
* Effet: Modélisation d'une personne
*
* @author Peter DAEHNE
* @version Version 1.0
*/
public class Personne {
private String nom;
private int age;
public Personne (String nom, int age) {this.nom = nom; this.age = age;}
public String toString () {return nom + "[" + age + " ans]";}
}// Personne
/**
* Effet: Test de la Pile générique implantée dans un java.util.Vector<T>
*
* @author Peter DAEHNE
* @version Version 1.0
*/
public class TestPileVect {
public static void doIt () {
Integer[] ints = new Integer[22]; for (int k=0;k<22;k++) {ints[k] = new Integer(k);}
TestPileX.test(new PileVect<Integer>(), ints);
String[] str = new String[]{"zéro","un","deux","trois","quatre","cinq","six"};
TestPileX.test(new PileVect<String>(), str);
Personne[] pers = new Personne[]{new Personne("Pierre",20),new Personne("Paul",17),new Personne("Jacques",14),
new Personne("Julie",10), new Personne("Marie", 8), new Personne("Claire", 6)};
TestPileX.test(new PileVect<Personne>(), pers);
}// doIt
public void main (String[] args) {doIt();} // Permet de lancer le test en "standalone"
}// TestPileVect
/**
* Effet: Test de la Pile générique implantée dans un java.util.Vector<T>
*
* @author Peter DAEHNE
* @version Version 1.0
*/
public class TestPileX {
public static <T> void test (Pile<T> pile, T[] objs) {
String s="Test avec une " + pile.getClass().getName() + "<" + objs[0].getClass().getName() + ">";
System.out.println(s);
for (int k=0;k<s.length(); k++) {System.out.print("*");} System.out.println();
System.out.print("On empile:");
for (int k = 0; k < objs.length; k++) {System.out.print(" " + objs[k]); pile.push(objs[k]);}
System.out.println(); System.out.println("Nombre d'éléments: " + pile.nbElem());
System.out.println("Le sommet: " + pile.top());
System.out.print("On dépile:");
while (!pile.isEmpty()) {System.out.print(" " + pile.pop());}
System.out.println(); System.out.println();
}// test
}// TestPileX