C# classe de pile fifo

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 480 fois - Téléchargée 14 fois

Contenu du snippet

bonjour à tous !

Voilà je me suis fais une petite classe qui me sert à faire une pile fifo (First In First Out).
Les utilisations peuvent être diverses, pour ma part je l'utilise pour récupérer les n dernières lignes d'un gros fichier (> 20Go).
On peu facilement l'ajouter par exemple dans une pile de connection, d'instructions, etc.

A noter que c'est une pile d'object et donc que la valeur à retourner sera à caster.

	public class PileFifo
{
int iTaille = 0;
int curseur = 0;
object[] maPile;
public PileFifo(int taille)
{
if(taille <= 0)
throw new Exception("erreur : la taille paramétrée doit être supérieur à 0");

iTaille = taille;
maPile = new object[iTaille];
}
public object add(object o)
{
if (curseur == iTaille)
{
object toReturn;
curseur--;
toReturn = maPile[curseur];
for (int i = curseur; i > 0; i--)
{ maPile[i] = maPile[i - 1]; }
maPile[0] = o;
curseur++;
return toReturn;
}
else
{
for (int i = curseur; i > 0; i--)
{ maPile[i] = maPile[i - 1]; }
maPile[0] = o;
curseur++;
return null;
}
}
public object get()
{
if (curseur == 0) return null;

object toReturn = maPile[curseur-1];
maPile[curseur-1] = null;
curseur--;

return toReturn;
}

public object[] getAll()
{ return maPile; }

}


Si vous avez des commentaires, amélioration, etc. je suis preneur ;)

Naga

A voir également

Ajouter un commentaire

Commentaires

NHenry
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136 -
Bonsoir,

Pourquoi ne pas utiliser la classe générique System.Collection.Generic.Stack<T> ou Queue<T> ?
http://msdn.microsoft.com/fr-fr/library/system.collections.stack%28v=vs.110%29.aspx
http://msdn.microsoft.com/fr-fr/library/7977ey2c%28v=vs.110%29.aspx
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
salut,

Car de cette manière les gens peuvent comprendre le fonctionnement, et ca permet de mieux gérer ses variables je trouve. Ensuite, ces listes sont beauuuuuuucoup plus lourdes que la mienne (car bien sûr avec beaucoup plus de fonctions qui, dans le cas actuel, ne me sont absolument pas utiles).

Et bon, je l'avoues, je préfère faire les outils plutôt que m'appuyer dessus, je préfère comprendre tout le fonctionnement de mon code le plus possible.
(c'est d'ailleurs un peu pour cette raison que j'évite d'utiliser windev)

naga
NHenry
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136 -
"(car bien sûr avec beaucoup plus de fonctions qui, dans le cas actuel, ne me sont absolument pas utiles)"
http://fr.thedailywtf.com/Comments/Trop-de-fonctions-%28T%29.aspx
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
D'une part je ne le fais pas pour accélérer le temps d'exécution mais éviter d'avoir 4000 fonctions qui ne me serviront jamais.
D'autre part d'un point de vue pédagogique c'est beaucoup plus intéressant car ca permet d'en comprendre le fonctionnement (bien que certains préfèrent, comme c'est apparemment le cas de pas mal de personnes, s'appuyer sur des choses sans tilter ce qui se passe).
De plus, ca permet de pouvoir faire des modification non prévu par les classes fournies plutôt que surcharger un résultat.
Enfin, le code, avec quelques légères modifications, est portable facilement pour un autre langage.

Et juste comme ca, j'ai eu un soucis avec un streamWriter qui plantait à cause d'une taille de buffer et aucuns moyens de gérer l'exception. J'ai refais une méthode d'écriture (je ne suis pas descendu plus bas que le stream) et maintenant je peux gérer mon exception. Donc oui, dans un monde parfais les classes .net sont optimisées aux mieux quelque soit le cas, mais c'est pas le cas.

bref balancer un lien à la c** parcequ'on sait pas argumenter, aucuns interêt. Par contre je suis d'accord pour dire qu'il faut utiliser les bibliothèques fournis si on comprend ce qu'elle fait.
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
ah et j'allais oublier :
Si Count équivaut déjà à la capacité, la capacité de Queue<T> est augmentée en réallouant automatiquement le tableau interne ; en outre, les éléments existants sont copiés dans le nouveau tableau avant que le nouvel élément soit ajouté.


c'est justement pas ce que je veux dans mon code actuel.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.