Upload files to "DEV.3.2/cours"
This commit is contained in:
44
DEV.3.2/cours/5.Files.md
Normal file
44
DEV.3.2/cours/5.Files.md
Normal file
@@ -0,0 +1,44 @@
|
||||
## 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.
|
||||
Reference in New Issue
Block a user