diff --git a/slides/cours_9.md b/slides/cours_9.md index 1216294df4b38e53e2230e9647ee28ad5910d129..58e9e075f93f65132bf29f08fb985b157d62f007 100644 --- a/slides/cours_9.md +++ b/slides/cours_9.md @@ -691,3 +691,79 @@ void stack_destroy(stack *s) {  +## Structure de données en C? + +. . . + +```C +txpedef struct _element { // Elément de liste + int data; + struct _element* next; +} element; + +typedef struct _queue { // File d'attente: + element* head; // tête de file d'attente + element* tail; // queue de file d'attente +} queue; +``` + +# Fonctionnalités d'une file d'attente (gitlab) + +## Creation et consultations + +. . . + +```C +void queue_init(queue *fa); // head = tail = NULL +bool queue_is_empty(queue fa); // checks if queue is empty +int queue_tail(queue fa); // returns the value of the tail +int queue_head(queue fa); // returns the value of the head +``` + +## Manipulations et destruction + +. . . + +```C +void queue_enqueue(queue *fa, int val); // adds an element before the tail +int queue_dequeue(queue *fa); // removes the head and returns stored value +void queue_destroy(queue *fa); // dequeues everything into oblivion +``` + +# Enfilage + +## Deux cas différents: + +1. La file est vide (faire un dessin): + +. . . + +{width=40%} + +2. La file n'est pas vide (faire un dessin): + +. . . + +{width=70%} + +<!-- # Défilage --> + +<!-- Voici l'entête de la procédure: `int queue_extraire(queue* fa);` --> + +<!-- On commence par récupérer, la valeur en tête de file d'attente via l'appel `queue_tete(*fa);` --> + +<!-- Puis on met un pointeur temporaire sur l'élément en tête, avant de déplacer le pointeur de tête sur l'élément suivant. --> +<!-- Finalement, on désalloue la mémoire --> + +<!--  --> + +<!-- Si la file d'attente n'avait qu'un seul élément, alors il faudrait mettre le pointeur `fa->debut` à `NULL`. --> +<!-- Dans ce cas, à la suite du point (3), le pointeur `fa->tete` se retrouve à `NULL`. On doit donc ajouter l'instruction : --> + +<!-- ```C --> +<!-- if (NULL == fa>tete) { --> +<!-- fa>debut = NULL; --> +<!-- } --> +<!-- ``` --> diff --git a/slides/figs/fig_empty_queue_insert.png b/slides/figs/fig_empty_queue_insert.png new file mode 100644 index 0000000000000000000000000000000000000000..62d73bdb4f2aaacb9060748b89575cb0ad1a6f4a Binary files /dev/null and b/slides/figs/fig_empty_queue_insert.png differ diff --git a/slides/figs/fig_non_empty_queue_insert.png b/slides/figs/fig_non_empty_queue_insert.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0c4aa785e63dee2b3c57c6643eab01b706aa49 Binary files /dev/null and b/slides/figs/fig_non_empty_queue_insert.png differ