Prépa Code Connexion Inscription

Exercices de programmation pour classes préparatoires

← Retour aux exercices

File implémentée par tableau circulaire

ocaml ★★★☆☆

On souhaite implémenter une file FIFO (premier entré, premier sorti) à l'aide d'un tableau circulaire de taille fixe.

Écrire une fonction file_ops : int -> (string * int) list -> int list qui : 1. initialise une file de capacité maximale capacite (sur un tableau de taille capacite), 2. applique successivement les opérations données dans la liste, 3. renvoie la liste des valeurs défilées, dans l'ordre où elles ont été défilées.

Chaque opération est un couple (nom, valeur) : - ("enfiler", x) : enfile la valeur x dans la file, - ("defiler", _) : défile la file et ajoute la valeur défilée au résultat (le second élément du couple est ignoré).

On suppose que les opérations sont valides : on n'enfile jamais dans une file pleine, et on ne défile jamais une file vide.

On pourra utiliser un tableau t de taille capacite, et deux références pour les indices de tête et de queue, en travaillant modulo capacite.

Exemples

AppelRésultat attendu
file_ops 3 [("enfiler", 1); ("enfiler", 2); ("defiler", 0)] [1]
file_ops 2 [("enfiler", 5); ("defiler", 0); ("enfiler", 7); ("defiler", 0)] [5; 7]

Votre code

Connectez-vous pour soumettre du code.