From 4b5e122057c0d10679c999b03072ad300e0b6b76 Mon Sep 17 00:00:00 2001
From: Orestis <orestis.malaspinas@pm.me>
Date: Fri, 17 Dec 2021 00:34:10 +0100
Subject: [PATCH] added the exercises

---
 slides/cours_11.md | 58 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 54 insertions(+), 4 deletions(-)

diff --git a/slides/cours_11.md b/slides/cours_11.md
index 37ce2eb..b3775b9 100644
--- a/slides/cours_11.md
+++ b/slides/cours_11.md
@@ -728,20 +728,70 @@ Pas possible.
 
 # Liste doublement chaînée
 
-## Exercice
+## Exercices
 
 * Partir du dessin suivant et par **groupe de 5**
 
 ![Un schéma de liste doublement chaînée d'entiers.](figs/doubly_linked_list.svg)
 
-. . .
+1. Écrire les structures de données pour représenter la liste doublement
+   chaînée dont le type sera `dll` (pour
+   `doubly_linked_list`)
+
+# Liste doublement chaînée
 
-1. Écrire les structures de données pour représenter la liste double chaînée.
-2. Écrire les fonctionnalités suivantes
+2. Écrire les fonctionnalités de création et consultation
 
 ```C 
+// crée la liste doublement chaînée
+dll dll_create();
+// retourne la valeur à la position actuelle dans la liste
+int dll_value(dll list);
+// la liste est-elle vide?
+bool dll_is_empty(dll list);
+// Est-ce que pos est le 1er élément?
+bool dll_is_head(dll list);
+// Est-ce que pos est le dernier élément?
+bool dll_is_tail(dll list);
+// data est-elle dans la liste?
+bool dll_is_present(dll list, int data);
+// affiche la liste
+void dll_print(dll list);
+```
 
+# Liste doublement chaînée
+
+3. Écrire les fonctionnalités de manipulation 
+
+```C 
+// déplace pos au début de la liste
+list dll_move_to_head(dll list);
+// déplace pos à la position suivante dans la liste
+dll dll_next(dll list);
+// déplace pos à la position précédente dans la liste
+dll dll_prev(dll list);
 ```
 
+# Liste doublement chaînée
+
+4. Écrire les fonctionnalités d'insertion
+
+```C
+// insertion de data dans l'élément *après* pos
+dll dll_insert_after(dll list, int data);
+// insertion de data en tête de liste
+dll dll_push(dll list, int data);
+```
+
+5. Écrire les fonctionnalités d'extraction
 
+```C
+// extraction de la valeur se trouvant dans l'élément *pos*
+// l'élément *pos* est libéré
+int dll_extract(dll *list);
+// extrait la donnée en tête de liste
+int dll_pop(dll *list);
+// vide la liste
+void dll_destroy(dll *list)
+```
 
-- 
GitLab