
Envoyé par
P'tite Nélodie
j'essaye de modélisation une file avec un tableau statique et pour optimiser la place, je souhaite faire une file circulaire.
avant de coder tout ça , j'essaye dèjà de faire l'algo. j'ai trouvé des codes sur ce site mais je ne comprends pas l'incrémentation de certains indices.
voilà ce que j'ai :
taille_maximale : 10
file : tableau d'entier de 0 à 9
la file étant en fifo j'ai besoin de deux indices:
indice_ins : indice de la case pour l'insertion d'un nouveau entier
indice_ext : indice de la case où extraire l'élement
j'utilise un booléen "plein" pour savoir si la file est pleine ou non
OK. Mais pour savoir si tu as le droit de lire, il faut aussi un flag ('vide'), car l'égalité des indices ne permet pas de savoir si le file est vide ou pleine.
Il est cependant possible de le déterminer en combinat l'égalité des indices et l'état du flag plein... (iw : indice d'écriture, ir : indice de lecture)
vide := iw = ir AND NOT full
personnellement, et pas souci de symétrie et de simplicité, je préfère maintenir l'état d'un flag vide au moment de l'initialisation (vide := TRUE) et des lectures (vide := ir = iw, après lecture)
pour l'initialisation :
indice_ins et indice_ext prennent la valeur 0, celle de la première case du tableau
plein prend la valeur faux
OK.
La file est vide si indice_ins = indice_ext et si plein vaut faux
OK, on s'est compris...
Pour l'insertion , il faut d'abord vérifié que la file n'est pas plein en vérifiant la valeur du booléen plein , puis on insert à l'indice "indice_ins" et on doit l'incrémenter de 1.
Correct.
c'est là que mon résonnement differt de ce que je trouve sur le net :
moi je teste si indice_ins == taille_max et si c'est le cas je dis que indice_ins doit prend la valeur 0.
Ton 'raisonnement' est correct.
les codes trouvés incrémentent indice_ins avec (indice_ins+1) % taille_max
et je ne vois pas pourquoi
est ce que quelqu'un pourait m'expliquer s'il vous plait ??
L'implémentation (peu recommandée, AMA, question de perf) avec les % produit le même comportement.
Ton raisonnement est correct et c'est celui que j'utilise, si je me souviens bien.
http://emmanuel-delahaye.developpez.com/clib.htm
Module FIFO.
Partager