/** * Effet: Pile générique * * @author Peter DAEHNE * @version Version 1.0 */ public interface Pile <T> { void push (T x); T pop (); T top (); boolean isEmpty (); int nbElem(); } // Pile import java.util.*; /** * Effet: Pile générique implantée dans un java.util.Vector<T> * * @author Peter DAEHNE * @version Version 1.0 */ public class PileVect <T> implements Pile<T> { private Vector<T> mem; /* Le Vector dans lequel on stocke les éléments */ public PileVect (int initSize) {mem = new Vector<T>(initSize);} public PileVect () {this(10);} public void push (T x) {mem.add(x);} public T pop () {return mem.remove(mem.size() - 1);} public T top () {return mem.get(mem.size() - 1);} public boolean isEmpty () {return mem.size() == 0;} public int nbElem () {return mem.size();} } // PileVect import java.util.*; /** * Effet: Pile générique implantée dans un tableau redimensionnable * * @author Peter DAEHNE * @version Version 1.0 */ public class PileArr <T> implements Pile<T> { private T[] mem; /* Le tableau redimensionnable dans lequel on stocke les éléments */ private int top; /* Le sommet de la Pile */ private int incr; /* Incrément lors du redimensionnement */ @SuppressWarnings("unchecked") public PileArr (int initSize, int incr) {mem = (T[])new Object[initSize]; top = 0; this.incr = incr;} public PileArr (int initSize) {this(initSize, 10);} public PileArr () {this(10);} @SuppressWarnings("unchecked") public void push (T x) { if (top == mem.length) { T[] newMem = (T[])new Object[mem.length + incr]; for (int k = 0; k < top; k++) {newMem[k] = mem[k];} mem = newMem; } mem[top++] = x; } // push public T pop () {return mem[--top];} public T top () {return mem[top - 1];} public boolean isEmpty () {return top == 0;} public int nbElem () {return top;} } // PileArr 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