48 lines
1.4 KiB
Java
48 lines
1.4 KiB
Java
|
|
// Classe PileTableau utilisant un tableau pour stocker les éléments
|
||
|
|
public class PileTableau<E> implements Pile<E> {
|
||
|
|
private static final int INITIAL_CAPACITY = 10;
|
||
|
|
private E[] elements;
|
||
|
|
private int size = 0;
|
||
|
|
|
||
|
|
@SuppressWarnings("unchecked")
|
||
|
|
public PileTableau() {
|
||
|
|
elements = (E[]) new Object[INITIAL_CAPACITY]; // Création du tableau initial
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public void push(E element) {
|
||
|
|
ensureCapacity(); // Redimensionne si nécessaire
|
||
|
|
elements[size++] = element; // Ajoute l'élément en haut de la pile
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public E pop() {
|
||
|
|
if (isEmpty()) {
|
||
|
|
throw new IllegalStateException("La pile est vide");
|
||
|
|
}
|
||
|
|
E element = elements[--size]; // Récupère l'élément en haut de la pile
|
||
|
|
elements[size] = null; // Supprime la référence pour éviter les fuites de mémoire
|
||
|
|
return element;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public int size() {
|
||
|
|
return size;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public boolean isEmpty() {
|
||
|
|
return size == 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Redimensionne le tableau si nécessaire
|
||
|
|
private void ensureCapacity() {
|
||
|
|
if (size == elements.length) {
|
||
|
|
@SuppressWarnings("unchecked")
|
||
|
|
E[] newElements = (E[]) new Object[elements.length * 2]; // Double la capacité
|
||
|
|
System.arraycopy(elements, 0, newElements, 0, elements.length);
|
||
|
|
elements = newElements;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|