Classe pour gérer une pile

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

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.