00-Généricité

publicité
/**
* 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
Téléchargement