informatique (MP2I/MPI) · Chapitre 7 · Application directe du cours
Dérouler une file circulaire
Structures séquentielles : listes, piles, files · niveau 2
É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.