Première partie
Objectifs d'apprentissage
- Reconnaître les situations où une pile est nécessaire pour la conception d'un algorithme.
- Décrire l'implémentation d'une pile à l'aide d'un tableau.
- Implémenter une pile à l'aide d'un tableau dynamique.
- Implémenter un type interface prédéfini.
- Appliquer le concept de type générique pour l'implémentation de classes et d'interfaces.
Piles (Stack)
Introduction
Les piles sont couramment en programmation. Dan un premier temps, assurez-vous de bien comprendre leur utilisation. Les piles respectent le protocole last-in first-out ou LIFO (dernier entré premier sorti). Cette structure de données empile les éléments les uns par dessus les autres. Vous n'avez accès qu'à l'élément du dessous.
Voici des exemples de la vie courante. Déterminez s'il s'agit d'exemple valable (vrai) où une pile est utilisée ou non (faux).
Application
Cette partie du laboratoire porte sur deux des trois implémentations de l'interface Stack. Il s'agit de deux implémentations lesquelles vous pourriez être évalué à l'examen de mi-session.
1.1 Modifier l'interface Stack : ajout d'une méthode clear()
Modifiez l'interface Stack ci-bas afin d'y ajouter la méthode abstraite public void clear().
public interface Stack<E> {
boolean isEmpty();
E peek();
E pop();
void push(E element);
}
Fichier :
1.2 Implémenter la méthode clear() de la classe ArrayStack
La classe ArrayStack utilise un tableau de taille fixe et réalise l'interface Stack. Puisque l'interface Stack a été modifiée afin d'y ajouter la méthode clear(), l'implémentation de la classe ArrayStack est défectueuse (essayez d'abord de la compiler sans y apporter de changement, quel message d'erreur est affiché à l'écran ?).
Puisque la classe ArrayStack réalise l'interface Stack, elle doit fournir une implémentation pour toutes les méthodes de l'interface. Ainsi, vous devez écrire une méthode void clear(). Cette dernière retire tous les éléments de cette pile (ArrayStack). La pile sera vide suite à cet appel. Utilisez la classe L6Q1 pour tester votre implémentation de la méthode clear.
Fichiers :
1.3 Créer une nouvelle classe DynamicArrayStack
Modifier la classe ArrayStack afin qu'elle utilise la technique de tableau dynamique. Cette nouvelle classe, DynamicArrayStack, possède une constante nommée DEFAULT_INC dont la valeur est 25. Le constructeur prend un argument, capacity, qui est la taille initiale du tableau (ont dit aussi taille physique de la pile). Cependant, la taille physique (longueur du tableau) n'est jamais moins que DEFAULT_INC (donc 25). Cette classe contient aussi une méthode d'accès (getter), getCapacity(), qui retourne un entier représentant la longueur du tableau (taille physique). Lorsque votre tableau est plein, un nouveau tableau ayant DEFAULT_INC cellules de plus que la taille actuelle du tableau doit être créée. Vous devez y copier les éléments de l'ancien tableau. Par ailleurs, à l'inverse, lorsque la taille logique de la pile (nombre d'éléments) a DEFAULT_INC éléments de moins que la taille physique de la pile (taille du tableau), vous devez automatiquement en diminuer la taille (le nouveau tableau a alors DEFAULT_INC cellules de moins que l'ancien tableau). Faites les ajustements nécessaires, notamment dans pop, push, clear et les constructeurs (rappel, la taille physique (taille du tableau) minimale est DEFAULT_INC).
Fichier :