diff --git a/slides/cours_11.md b/slides/cours_11.md index 1484c816ee6fab87ba3d7237536affab62b86b80..1f627fa8997080cca7e3a6eb78aa944a7d20b910 100644 --- a/slides/cours_11.md +++ b/slides/cours_11.md @@ -9,7 +9,7 @@ date: "2024-12-09" . . . -* tructure de données abstraite de type LIFO +* Structure de données abstraite de type LIFO ## Quelles fonctionnalités? @@ -47,7 +47,7 @@ pour i de 0 à N-1 dépiler de D dans G empiler tab[i] sur G dépiler tout D dans G -tab est trié dans G +dépiler tout G dans tab ``` # Le tri à deux piles (3/3) @@ -114,7 +114,7 @@ tab est trié dans G ## De infixe à post-fixe * Une *pile* est utilisée pour stocker *opérateurs* et *parenthèses*. -* Les opérateurs on des *priorités* différentes. +* Les opérateurs ont des *priorités* différentes. ```C ^ : priorité 3 @@ -130,7 +130,7 @@ tab est trié dans G * On lit l'expression infixe de gauche à droite. -* On examine le prochain caractère de l'expression infixe. +* On examine le prochain caractère de l'expression infixe: * Si opérande, le placer dans l'expression du résultat. * Si parenthèse le mettre dans la pile (priorité 0). * Si opérateur, comparer sa priorité avec celui du sommet de la pile: @@ -195,7 +195,7 @@ Infixe Postfixe Pile Priorité * Une sorte de corrigé: ```C -char *infix_to_postfix(char* infix) { // init and alloc stack and postfix +char* infix_to_postfix(char* infix) { // init and alloc stack and postfix for (size_t i = 0; i < strlen(infix); ++i) { if (is_operand(infix[i])) { // we just add operands in the new postfix string @@ -255,7 +255,7 @@ Caractère lu Pile opérandes . . . ```C -double evaluate(char *postfix) { // init stack +double evaluate(char* postfix) { // init stack for (size_t i = 0; i < strlen(postfix); ++i) { if (is_operand(postfix[i])) { stack_push(&s, postfix[i]); @@ -306,7 +306,7 @@ void stack_destroy(stack *s); void stack_push(stack *s, int val); void stack_pop(stack *s, int *val); void stack_peek(stack s, int *val); -bool stack_is_empty(stack s); // reutrn NULL == stack; +bool stack_is_empty(stack s); // return NULL == stack; ``` # La liste chaînée et pile (3/6) @@ -447,8 +447,8 @@ void stack_destroy(stack *s) { * Lire l'élément de la fin de la file. * Lire l'élément du devant de la file. -* Créer une liste vide. -* Détruire une liste vide. +* Créer une file vide. +* Détruire une file. # La file d'attente (2/2) @@ -456,7 +456,7 @@ void stack_destroy(stack *s) { ## Implémentation possible -* La structure file, contient un pointeur vers la tête et un vers le début de la file. +* La structure de file, contient un pointeur vers la tête et un autre vers le début de la file. * Entre les deux, les éléments sont stockés dans une liste chaînée. {width=80%} @@ -470,7 +470,7 @@ typedef struct _element { // Elément de liste int data; struct _element* next; } element; -typedef struct _queue { // File d'attente: +typedef struct _queue { // File d'attente element* head; // tête de file d'attente element* tail; // queue de file d'attente } queue; @@ -478,7 +478,7 @@ typedef struct _queue { // File d'attente: # Fonctionnalités d'une file d'attente -## Creation et consultations +## Création et consultations . . . @@ -616,8 +616,8 @@ On défile jusqu'à ce que la file soit vide! * Données stockées dans un tableau; * Tableau de taille connue à la compilation ou pas (réallouable); -* `tail` seraient les indices du tableau; -* `capacity` seraient la capacité maximale; +* `tail` serait un indice du tableau; +* `capacity` serait la capacité maximale; * On *enfile* "au bout" du tableau, au défile au début (indice `0`). . . . @@ -854,7 +854,7 @@ typedef element* sorted_list; // la liste // insertion de val sorted_list sorted_list_push(sorted_list list, int val); // la liste est-elle vide? -bool is_empty(sorted_list list); // list == NULL +bool sorted_list_is_empty(sorted_list list); // list == NULL // extraction de val (il disparaît) sorted_list sorted_list_extract(sorted_list list, int val); // rechercher un élément et le retourner