diff --git a/slides/cours_8.md b/slides/cours_8.md index 0323e6f0629daf05e53708a969f36dd56c864874..62a49995936f5ea3a02564bc205fb52e0edf7b7d 100644 --- a/slides/cours_8.md +++ b/slides/cours_8.md @@ -331,5 +331,83 @@ mémoire). . . . -Hé oui vous avez deviner: un tableau! +Et oui vous avez deviner: 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) { + stack->top += 1; + stack->data[stack->top] = val; +} +``` + +# Les piles (5/N) + +## Dépiler (enlever l'élément du sommet) + +. . . + +```C +int stack_pop(stack *s) { + stack->top -= 1; + return stack->data[stack->top+1]; +} +``` + +## Jeter un oeil (regarder le sommet) + +. . . + +```C +int stack_peek(stack *s) { + return stack->data[stack->top]; +} +``` + +## Voyez-vous des problèmes potentiels avec cette implémentation? + +. . . + +* Empiler avec une pile pleine. +* Dépiler avec une pile vide. +* Jeter un oeil au sommet d'une pile vide. + +