44 lines
1.9 KiB
Markdown
44 lines
1.9 KiB
Markdown
|
|
## Principe
|
||
|
|
Une file supporte les opérations suivantes :
|
||
|
|
* **enqueue** ajoute un élément à la file.
|
||
|
|
* **dequeue** retire et renvoie l'élément le plus ancien.
|
||
|
|
* **empty** détermine si la file est vide.
|
||
|
|
Une file préserve l'ordre d'entrée des éléments. Elle est FIFO (First in First Out) : premier arrivé, premier servi. On utilise des files dans les tampons, les filles d'attente.
|
||
|
|
|
||
|
|
## En java
|
||
|
|
L'interface **Queue**, qui hérite de **Collection**, représente une file.
|
||
|
|
* enqueue -> add (offer)
|
||
|
|
* dequeue -> remove (poll)
|
||
|
|
* empty -> isEmpty
|
||
|
|
|
||
|
|
Les classes **ArrayDeque** et **LinkedList** réalisent Queue.
|
||
|
|
On peut coder une file en se basant sr la classe abstraite **AbstractQueue**.
|
||
|
|
|
||
|
|
## À faire soi-même
|
||
|
|
On peut coder une file avec un tableau.
|
||
|
|
|
||
|
|
| | B | C | | |
|
||
|
|
| --- | ----- | --- | --- | --- |
|
||
|
|
| | début | | fin | |
|
||
|
|
|
||
|
|
On doit maintenir deux indices pour savoir das quel intervalle sont stockés les éléments. Le tableau est considéré comme circulaire : un indice qui devient trop grand retourne 0.
|
||
|
|
|
||
|
|
file vide :
|
||
|
|
|
||
|
|
| | | | | | |
|
||
|
|
| --- | --- | --- | --------- | --- | --- |
|
||
|
|
| | | | fin/début | | |
|
||
|
|
|
||
|
|
file pleine :
|
||
|
|
|
||
|
|
| G | B | C | D | E | F |
|
||
|
|
| --- | --------- | --- | --- | --- | --- |
|
||
|
|
| | début/fin | | | | |
|
||
|
|
|
||
|
|
Il faut ajouter un attribut pour distinguer ces deux cas (nombre d'éléments, dernière opération, etc).
|
||
|
|
On peut dégrader les performances à chaque fois que la capacité est insuffisante, ou on peut refuser les enqueue surnuméraires et ainsi obtenir une **file bornée**.
|
||
|
|
On peut aussi coder une file avec une liste chaînée.
|
||
|
|
|
||
|
|
|
||
|
|
On doit se souvenir de la référence au premier et au dernier maillon. Les éléments sont stockés du plus ancien au plus récent.
|
||
|
|
!! Attention les deux références peuvent être modifiées par enqueue et pas dequeue.
|