diff --git a/DEV.3.2/cours/5.Files.md b/DEV.3.2/cours/5.Files.md new file mode 100644 index 0000000..a55602c --- /dev/null +++ b/DEV.3.2/cours/5.Files.md @@ -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. \ No newline at end of file