diff --git a/slides/cours_11.md b/slides/cours_11.md index 37ce2ebd9bf9fd0961d423865afd27f6d810a6f4..b3775b93beafe41435eda6f91c9973d5f2b50a54 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**  -. . . +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) +```