diff --git a/slides/cours_8.md b/slides/cours_8.md index 475bdaaa1f7b8bd53a425a12e983c82c86341367..2cfa2a3b115ca5eda52941bc0d446a703ad90b67 100644 --- a/slides/cours_8.md +++ b/slides/cours_8.md @@ -279,145 +279,3 @@ void prises_devant(int n, bool board[n][n], int li, int co) { } ``` -# Les piles (1/N) - -## Qu'est-ce donc? - -* Structure de données abstraite... - -. . . - -* de type `LIFO` (*Last in first out*). - -](figs/Stack.svg){width=70%} - -## Des exemples de la vraie vie - -. . . - -* Pile d'assiettes, de livres, ... -* Adresses visitées par un navigateur web. -* Les calculatrices du passé (en polonaise inverse). -* Les boutons *undo* de vos éditeurs de texte (aka *u* dans vim). - -# Les piles (2/N) - -## Fonctionnalités - -. . . - -1. Empiler (push): ajouter un élément sur la pile. -2. Dépiler (pop): retirer l'élément du sommet de la pile et le retrouver. -3. Liste vide? (is_empty?). - -. . . - -4. Jeter un œil (peek): retourner l'élément du sommet de la pile (sans le dépiler). -5. Nombre d'éléments (length). - -## Comment faire les 4,5 à partir de 1 à 3? - -. . . - -4. Dépiler l'élément, le copier, puis l'empiler à nouveau. -5. Dépiler jusqu'à ce que la pile soit vide, puis empiler à nouveau. - -. . . - -## Existe en deux gouts - -* Pile avec ou sans limite de capacité (à concurrence de la taille de la -mémoire). - -# Les piles (3/N) - -## Implémentation - -* Jusqu'ici on n'a pas du tout parlé d'implémentation (d'où le nom de structure - abstraite). -* Pas de choix unique d'implémentation. - -## Quelle structure de données allons nous utiliser? - -. . . - -Et oui vous avez deviné: un tableau! - -## La structure: de quoi avons-nous besoin (pile de taille fixe)? - -. . . - -```C -#define MAX_CAPACITY 500 -typedef struct _stack { - int data[MAX_CAPACITY]; // les données - int top; // indice du sommet -} stack; -``` - -# Les piles (4/N) - -## Initialisation - -. . . - -```C -void stack_init(stack *s) { - s->top = -1; -} -``` - -## Est vide? - -. . . - -```C -bool stack_is_empty(stack s) { - return s.top == -1; -} -``` - -## Empiler (ajouter un élément au sommet) - -. . . - -```C -void stack_push(stack *s, int val) { - s->top += 1; - s->data[s->top] = val; -} -``` - -# Les piles (5/N) - -## Dépiler (enlever l'élément du sommet) - -. . . - -```C -int stack_pop(stack *s) { - s->top -= 1; - return s->data[s->top+1]; -} -``` - -## Jeter un œil (regarder le sommet) - -. . . - -```C -int stack_peek(stack *s) { - return s->data[s->top]; -} -``` - -## Voyez-vous des problèmes potentiels avec cette implémentation? - -. . . - -* Empiler avec une pile pleine. -* Dépiler avec une pile vide. -* Jeter un œil au sommet d'une pile vide. - -