Adloun

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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre