Classe pour gérer une pile

Soyez le premier à donner votre avis sur cette source.

Vue 8 149 fois - Téléchargée 554 fois

Description

La pile enregistre des adresses, donc selon le cas, il vous faudra rajouter un petit & devant la variable à empiler.

Suite à la remarque de eldered, je précise qu'en effet, cette pile a une double fonction. Utilisez ChangerType(FIFO) pour transformer la pile en FILE.

DESCRIPTION DES FONCTIONS

void ChangerType (char cType)
permet de changer le type de dépilation.
Le type FIFO ou "First In First Out" commencera par dépiler le premier élément que vous avez empilé. Le type FILO ou "First In Last Out" dépile le dernier élément que vous avez empilé.

void Empiler (void * pAdr)
empile une nouvelle adresse et la place à la fin de la pile (au dessus).

void Empiler (void * pAdr, long lTaille)
copie l'élément à empiler (copie lTaille octets) puis empile, ainsi vous pourrez empiler des données et les effacer vu que la pile les aura copiés. Par contre, la pile ne le supprime pas toute seule alors pensez-y !

void * Depiler ()
dépile le premier élément pour FIFO, le dernier pour FILO.

void * Pointer (long lPosition)
Permet de pointer sur l'élément se trouve à la position iPosition dans la pile.
Inabituel dans la gestion d'une pile mais cela peut être pratique parfois.

unsigned long Taille ()
Renvoie le nombre déléments dans la pile

Source / Exemple :


#ifndef __PILE__H__
#define __PILE__H__

#ifndef NULL
#ifdef  __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

class CPile {
private:
  typedef struct pointeur {
    void * pAdr;
    pointeur * pPrecedent, * pSuivant;
  } pointeur;
  pointeur * m_pPremier, * m_pDernier;
  char m_cType;
  void Initialiser ();
public:
  enum {
    FIFO = 0x00,
    LILO = 0x00,
    FILO = 0x01,
    LIFO = 0x01,
  };
  CPile ();
  CPile (char cType);
  void ChangerType (char cType);
  void Empiler (void * pAdr);
  void Empiler (void * pAdr, long lTaille);
  void * Depiler ();
  void * Pointer (long lPosition);
  unsigned long Taille ();
  ~CPile ();
};

#endif // __PILE__H__

Conclusion :


Lorsqu'il n'y a rien dans la pile, la fonction Depiler renvoi NULL. Cela peut préter à confusion si votre programme prévoie éventuellement d'empiler des pointeurs sur NULL. Dans ce cas, je vous conseille de changer un peut le programme et d'insérer une exception à cet endroit (idem pour la fonction Pointer, elle renvoie NULL lorsque l'indice n'est pas trouvé).

Dans le zip, vous trouverez le fichier d'entête (pile.h), le fichier de code (pile.cpp) et un fichier qui sert à tester cette pile (main.cpp), n'insérez pas ce fichier dans votre projet.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
231
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
22 avril 2007

C cool, par contre sache que la PILE en elle meme ne fait que depiler par le haut, autrement dit, tu dépiles le dernier élément que tu a mis, pour ce qui est du dépilement par le premier élément insérer, c une FILE. Voila ++ !
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Mouais
C'est pas mal pour un débutant

;)

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.