// Classe PileTableau utilisant un tableau pour stocker les éléments public class PileTableau implements Pile { 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; } } }