Skip to content
Snippets Groups Projects
Verified Commit 4380c0c7 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added enqueue. missing dequeue

parent 735c1d0c
No related branches found
No related tags found
No related merge requests found
Pipeline #14967 passed
......@@ -691,3 +691,79 @@ void stack_destroy(stack *s) {
![Illustration d'une file
d'attente.](figs/fig_queue_representation.png)
## 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):
. . .
![Insertion dans une file d'attente
vide.](./figs/fig_empty_queue_insert.png){width=40%}
2. La file n'est pas vide (faire un dessin):
. . .
![Insertion dans une file d'attente
non-vide.](./figs/fig_non_empty_queue_insert.png){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 -->
<!-- ![Extraction d'une file d'attente](./figures/fig_queue_extract.png) -->
<!-- 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; -->
<!-- } -->
<!-- ``` -->
slides/figs/fig_empty_queue_insert.png

13.3 KiB

slides/figs/fig_non_empty_queue_insert.png

20.1 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment