C# classe de pile fifo

0/5 (5 avis)

Snippet vu 12 024 fois - Téléchargée 17 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
nagaD.scar Messages postés 4271 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 16
14 nov. 2013 à 14:51
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.
nagaD.scar Messages postés 4271 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 16
14 nov. 2013 à 14:42
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.
NHenry Messages postés 15083 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 septembre 2023 159
14 nov. 2013 à 13:57
"(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 4271 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 16
12 nov. 2013 à 07:58
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 15083 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 septembre 2023 159
11 nov. 2013 à 22:48
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

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.