diff --git a/slides/cours_12.md b/slides/cours_12.md index 08cca9343e429715ed32c62d01ee8648aa55a244..67f7478dcf7a05d1ed30b7f696f83a7c3b931376 100644 --- a/slides/cours_12.md +++ b/slides/cours_12.md @@ -12,12 +12,12 @@ date: "2024-12-16" * Structure de données abstraite permettant le stockage d'éléments. * *FIFO*: First In First Out, ou première entrée première sortie. * Analogue de la vie "réelle"": - * File à un guichet, - * Serveur d'impressions, - * Mémoire tampon, ... + * File à un guichet, + * Serveur d'impressions, + * Mémoire tampon, ... ## Fonctionnalités - + . . . * Enfiler: ajouter un élément à la fin de la file. @@ -85,7 +85,7 @@ void queue_destroy(queue *fa); # Enfilage -## Deux cas différents: +## Deux cas différents 1. La file est vide (faire un dessin): @@ -136,7 +136,6 @@ void queue_enqueue(queue *fa, int val) { {width=25%} - 3. La file est vide (problème) # Défilage @@ -172,7 +171,7 @@ On défile jusqu'à ce que la file soit vide! # Complexité -## Quelle sont les complexité de: +## Quelle est la complexité de * Enfiler? @@ -188,7 +187,6 @@ On défile jusqu'à ce que la file soit vide! * Est vide? - # Implémentation alternative ## Comment implémenter la file autrement? @@ -236,7 +234,6 @@ typedef struct _queue { ``` - * Enfiler? . . . @@ -261,7 +258,7 @@ typedef struct _queue { # Complexité -## Quelle sont les complexités de: +## Quelle est les complexités de * Initialisation? @@ -282,7 +279,6 @@ typedef struct _queue { ``` - * Enfiler? . . . @@ -421,7 +417,6 @@ Une liste chaînée triée est: ## Quelle structure de données dans notre cas? - Une liste chaînée bien sûr (oui c'est pour vous entraîner)! ```C @@ -535,9 +530,9 @@ sorted_list sorted_list_push(sorted_list list, int val) { sorted_list sorted_list_extract(sorted_list list, int val) { element *prec = *crt = list; // needed to glue elements together while (NULL != crt && val > crt->data) { - prec = crt; - crt = crt->next; - } + prec = crt; + crt = crt->next; + } if (NULL != crt && prec != crt && crt->data == val) { // glue things together prec->next = crt->next; free(crt); @@ -546,7 +541,6 @@ sorted_list sorted_list_extract(sorted_list list, int val) { } ``` - # L'extraction (2/3) 2. L'élément à extraire est le premier élément de la liste @@ -563,9 +557,9 @@ sorted_list sorted_list_extract(sorted_list list, int val) { sorted_list sorted_list_extract(sorted_list list, int val) { element *prec = *crt = list; // needed to glue elements together while (NULL != crt && val > crt->data) { - prec = crt; - crt = crt->next; - } + prec = crt; + crt = crt->next; + } // glue things together if (NULL != crt && crt->data == val && prec == crt) { list = list->next; @@ -594,9 +588,9 @@ On retourne la liste inchangée. sorted_list sorted_list_extract(sorted_list list, int val) { element *prec = *crt = list; // needed to glue elements together while (NULL != crt && val > crt->data) { - prec = crt; - crt = crt->next; - } + prec = crt; + crt = crt->next; + } if (NULL == crt || crt->data != val) { // val not present return list; } @@ -605,8 +599,6 @@ sorted_list sorted_list_extract(sorted_list list, int val) { # La recherche - - ```C element* sorted_list_search(sorted_list list, int val); ``` @@ -692,14 +684,13 @@ $$ \mathcal{O}(N). $$ - # Liste doublement chaînée ## Application: navigateur ou éditeur de texte * Avec une liste chaînée: - * Comment implémenter les fonctions `back` et `forward` d'un navigateur? - * Comment implémenter les fonctions `undo` et `redo` d'un éditeur de texte? + * Comment implémenter les fonctions `back` et `forward` d'un navigateur? + * Comment implémenter les fonctions `undo` et `redo` d'un éditeur de texte? . . . @@ -737,7 +728,7 @@ Pas possible. 2. Écrire les fonctionnalités de création et consultation -```C +```C // crée la liste doublement chaînée dll dll_create(); // retourne la valeur à la position actuelle dans la liste @@ -756,9 +747,9 @@ void dll_print(dll list); # Liste doublement chaînée -3. Écrire les fonctionnalités de manipulation +3. Écrire les fonctionnalités de manipulation -```C +```C // déplace pos au début de la liste dll dll_move_to_head(dll list); // déplace pos à la position suivante dans la liste @@ -789,4 +780,3 @@ int dll_pop(dll *list); // vide la liste void dll_destroy(dll *list); ``` -