From 2b45b6a42c877fd40163dc6b0e827a9e351122c7 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Mon, 4 Dec 2023 14:22:15 +0100 Subject: [PATCH] updated cours9 --- slides/cours_9.md | 87 ++--------------------------------------------- 1 file changed, 2 insertions(+), 85 deletions(-) diff --git a/slides/cours_9.md b/slides/cours_9.md index 7df8cdb..1d94f12 100644 --- a/slides/cours_9.md +++ b/slides/cours_9.md @@ -210,7 +210,7 @@ void prises_devant(int n, bool board[n][n], int li, int co) { * de type `LIFO` (*Last in first out*). ](figs/Stack.svg){width=70%} +[Wikipedia](https://upload.wikimedia.org/wikipedia/commons/e/e1/Stack_(data_structure)_LIFO.svg)](figs/Stack.svg){width=70%} ## Des exemples de la vraie vie @@ -368,8 +368,7 @@ void assert(int expression); - Macro permettant de tester une condition lors de l'exécution d'un programme: - Si `expression == 0`{.C} (condition fausse), `assert()`{.C} affiche un message d'erreur sur `stderr`{.C} et termine l'exécution du programme. - Sinon l'exécution se poursuit normalement. - - Peuvent être désactivés à la compilation avec `-DNDEBUG` (équivalent à `#define - NDEBUG`) + - Peuvent être désactivés à la compilation avec `-DNDEBUG` (équivalent à `#define NDEBUG`) ## À quoi ça sert? @@ -417,85 +416,3 @@ int stack_peek(stack *s) { - Mais peuvent être pratiques quand même pour ça... - Typiquement désactivées dans le code de production. - -# La pile dynamique - -## Comment modifier le code précédent pour avoir une taille dynamique? - -. . . - -```C -// alloue une zone mémoire de size octets -void *malloc(size_t size); -// change la taille allouée à size octets (contiguïté garantie) -void *realloc(void *ptr, size_t size); -``` - -## Et maintenant? - -. . . - -```C -stack_create(); // crée une pile avec une taille par défaut -// vérifie si la pile est pleine et réalloue si besoin -stack_push(); -// vérifie si la pile est vide/trop grande -// et réalloue si besoin -stack_pop(); -``` - -## Exercice: ouvrir un repo/issues pour l'implémentation - -* Oui-oui cela est une introduction au développement collaboratif (et - hippie). - -# Le tri à deux piles (1/3) - -## Cas pratique - -{width=70%} - -# Le tri à deux piles (2/3) - -## Exercice: formaliser l'algorithme - -. . . - -## Algorithme de tri nécessitant 2 piles (G, D) - -Soit `tab` le tableau à trier: - -```C -pour i de 0 à N-1 - tant que (tab[i] > que le sommet de G) - dépiler G dans D - tant que (tab[i] < que le sommet de D) - dépiler de D dans G - empiler tab[i] sur G -dépiler tout D dans G -tab est trié dans G -``` - -# Le tri à deux piles (3/3) - -## Exercice: trier le tableau `[2, 10, 5, 20, 15]` - -```C - - - - - - - - - - - - - - - - -``` - -- GitLab