Dérouler une file circulaire
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 7 — Structures séquentielles : listes, piles, files
Énoncé
Sur une file circulaire de capacité , initialement vide, on exécute : enfiler ; défiler deux fois ; enfiler . Donner à chaque étape la valeur de debut, de n, et le contenu du tableau.
Corrigé
Mesuré, sur la structure du cours :
apres 10,20,30 debut=0 n=3 file=[10 20 30]
tableau=[10 20 30 . . . . .]
apres 2 defilages debut=2 n=1 file=[30] (on a obtenu 10 puis 20)
tableau=[10 20 30 . . . . .] (rien n'est efface)
apres 40..100 debut=2 n=8 file=[30 40 50 60 70 80 90 100]
tableau=[90 100 30 40 50 60 70 80]
Trois observations, et elles sont tout l'intérêt de la structure.
- Défiler n'efface rien. La case contient toujours après le premier défilage : ce qui change, c'est
debut, pas le tableau. Une case « libre » est une case que personne ne regarde, et c'est suffisant. - Le contenu logique ne se lit pas dans l'ordre du tableau. La file est alors que le tableau porte : l'élément de rang est en case . Le tableau est une représentation, pas la structure.
- On a bien logé huit éléments dans huit cases, en ayant enfilé dix valeurs au total. Le tableau se réemploie indéfiniment ; c'est ce que le décalage naïf, en par défilage, ne permet pas.
L'invariant à écrire dans le code : et , et les éléments occupent les cases . Tout le reste — les deux assert du cours — en découle.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.