begin process at 2012 05 27 16:41:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > GESTION D'UNE PILE PAR LES CLASSES

GESTION D'UNE PILE PAR LES CLASSES


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :pile, algorithme, algo, pile, piles Niveau :Débutant Date de création :26/05/2006 Date de mise à jour :25/07/2006 18:20:21 Vu :8 864

Auteur : UKR6900

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Exemple de la gestion d'une pile élémentaire en utilisant
une classe dynamique. Ce code à été compilé avec Borland C++ 5.5

Source

  • #include <stdio.h>
  • #include <iostream>
  • using namespace std;
  • template <class T> class Cl_Pile;
  • //--------------------------------------------------------
  • // DEBUT CLASSE Cl_Elt
  • //--------------------------------------------------------
  • template <class T>
  • class Cl_Elt{
  • private:
  • static int NbrElts;
  • public:
  • Cl_Elt *suivant;
  • T valeur;
  • Cl_Elt(){NbrElts++;};
  • ~Cl_Elt(){NbrElts--;};
  • friend class Cl_Pile <T> ;
  • };//end class
  • //--------------------------------------------------------
  • // FIN CLASSE Cl_Elt
  • //--------------------------------------------------------
  • template<class T>
  • int Cl_Elt<T>::NbrElts = 0;
  • //--------------------------------------------------------
  • // DEBUT CLASSE Cl_Pile
  • //--------------------------------------------------------
  • template <class T>
  • class Cl_Pile{
  • private:
  • void Inserer(Cl_Elt <T> *);
  • public:
  • Cl_Elt<T> *pTete;
  • Cl_Pile(){pTete=NULL;};
  • void Empiler (const T);
  • void Depiler();
  • void Affichage();
  • void TestPileVide();
  • void NbrElements(void){cout << Cl_Elt<T>::NbrElts;};
  • };//end class
  • //--------------------------------------------------------
  • // FIN CLASSE Cl_Pile
  • //--------------------------------------------------------
  • //------------------------------------------------------------------------------
  • // FONCTION : Empiler
  • // DESCRIPTION : Création d'un Elt et Empilage dans la Pile
  • //-------------------------------------------------------------------------------
  • template<class T>
  • void Cl_Pile<T>::Empiler(T val){
  • //Allocation memoire pour un nouveau Elément de la Pile.
  • Cl_Elt <T> * pEltTmp = new Cl_Elt <T>;
  • //Initialisation du pointeur pNoeud à NULL
  • pEltTmp->suivant = NULL;
  • //Transfert de la valeur
  • pEltTmp->valeur = val;
  • //Insérer dans la Pile
  • Inserer (pEltTmp);
  • }//end process
  • //------------------------------------------------------------------------------
  • // FONCTION : Inserer
  • // DESCRIPTION : Insertion d'un Elt dans la Pile
  • //-------------------------------------------------------------------------------
  • template <class T>
  • void Cl_Pile<T>::Inserer(Cl_Elt <T> *pElt){
  • //Si le pElt est vide, on sort
  • if (!pElt) return;
  • //Si la Pile vide, on lui accroche l'Elt et on sort
  • if (pTete == NULL){
  • pTete = pElt;
  • cout << "Création réussie!" << endl;
  • return;
  • }//end if
  • //Création de deux pointeurs de déplacement dans la Pile et initilisation
  • Cl_Elt<T> * courant = pTete;
  • Cl_Elt<T> * precedent = NULL;
  • //On se déplace à travers la Pile jusqu'a ce que courant atteint la valeur NULL
  • //precedent memorise l'adresse du dernier Elt
  • while (courant){
  • precedent = courant;
  • courant = courant->suivant;
  • }//end while
  • //Maintenant on place le nouvel Elt en fin de Pile
  • precedent->suivant = pElt;
  • cout << "Création réussie!" << endl;
  • }//end process
  • //------------------------------------------------------------------------------
  • // FONCTION : Depiler
  • // DESCRIPTION : Retire un élément de la Pile et l'affiche
  • //-------------------------------------------------------------------------------
  • template <class T>
  • void Cl_Pile<T>::Depiler(){
  • //Si la Pile vide, on sort
  • if (pTete == NULL){
  • cout << "Pile vide!" << endl;
  • return;
  • }//end if
  • //Création de deux pointeurs de déplacement dans la Pile et initilisation
  • Cl_Elt<T> * courant = pTete;
  • Cl_Elt<T> * precedent = NULL;
  • //On se déplace à travers la Pile jusqu'a ce que courant atteint la valeur NULL
  • //precedent memorise l'adresse du dernier Elt
  • while (courant){
  • if (courant->suivant == NULL){
  • cout << "| " << courant->valeur << " |" << endl;
  • if (precedent != NULL)
  • precedent->suivant = NULL;
  • else
  • pTete = NULL;
  • break;
  • }else{
  • precedent = courant;
  • courant = courant->suivant;
  • }//end if
  • }//end while
  • delete courant;
  • }//end process
  • //------------------------------------------------------------------------------
  • // FONCTION : Affichage
  • // DESCRIPTION : Affiche le contenu de la Pile à l'écran
  • //-------------------------------------------------------------------------------
  • template <class T>
  • void Cl_Pile<T>::Affichage(){
  • //Si pTete différent de NULL alors il affiche le contenu de la Pile
  • if(pTete!=NULL){
  • Cl_Elt<T> * courant = pTete;
  • while (courant){
  • cout << "|" << courant->valeur;
  • courant = courant->suivant;
  • }//end while
  • cout << "|" << endl;
  • }else
  • cout << "Pile vide!" << endl;
  • //end if
  • }//end process
  • //------------------------------------------------------------------------------
  • // FONCTION : TestPileVide
  • // DESCRIPTION : Controle si la Pile est vide
  • //-------------------------------------------------------------------------------
  • template <class T>
  • void Cl_Pile<T>::TestPileVide(){
  • if(pTete==NULL)
  • cout << "\nPile vide!" << endl;
  • else
  • cout << "\nPile non vide!" << endl;
  • //end if
  • }//end process
  • //------------------------------------------------------------------------------
  • // START PROGRAM TEST CLASS
  • //-------------------------------------------------------------------------------
  • void main(){
  • Cl_Pile <int> stack;
  • stack.Empiler(5);
  • stack.Empiler(10);
  • stack.Affichage();
  • stack.Depiler();
  • stack.Depiler();
  • stack.Depiler();
  • cout << "Nombre d'éléments : " ;
  • stack.NbrElements();
  • stack.TestPileVide();
  • }//end program
  • //------------------------------------------------------------------------------
  • // END PROGRAM TEST CLASS
  • //-------------------------------------------------------------------------------
#include <stdio.h>
#include <iostream>
 using namespace std;

template <class T> class Cl_Pile;
//--------------------------------------------------------
//                      DEBUT CLASSE Cl_Elt
//--------------------------------------------------------
  template <class T> 
  class Cl_Elt{ 
    private:
      static int NbrElts;

    public: 
      Cl_Elt *suivant;   
      T valeur; 
      Cl_Elt(){NbrElts++;};
      ~Cl_Elt(){NbrElts--;};
      friend class Cl_Pile <T> ;
  };//end class 
//--------------------------------------------------------
//                      FIN CLASSE Cl_Elt
//--------------------------------------------------------
  template<class T> 
  int Cl_Elt<T>::NbrElts = 0;

//--------------------------------------------------------
//                      DEBUT CLASSE Cl_Pile
//--------------------------------------------------------
  template <class T> 
  class Cl_Pile{ 
    private:
      void Inserer(Cl_Elt <T> *);
    public: 
      Cl_Elt<T> *pTete; 
      Cl_Pile(){pTete=NULL;};
      void Empiler (const T); 
      void Depiler();
      void Affichage();
      void TestPileVide();  
      void NbrElements(void){cout << Cl_Elt<T>::NbrElts;}; 
  };//end class 
//--------------------------------------------------------
//                      FIN CLASSE Cl_Pile
//--------------------------------------------------------

//------------------------------------------------------------------------------
// FONCTION      : Empiler
// DESCRIPTION   : Création d'un Elt et Empilage dans la Pile
//-------------------------------------------------------------------------------
  template<class T> 
  void Cl_Pile<T>::Empiler(T val){
  //Allocation memoire pour un nouveau Elément de la Pile. 
    Cl_Elt <T> * pEltTmp = new Cl_Elt <T>; 

  //Initialisation du pointeur pNoeud à NULL
    pEltTmp->suivant = NULL; 

  //Transfert de la valeur 
    pEltTmp->valeur = val; 

  //Insérer dans la Pile
    Inserer (pEltTmp); 

  }//end process

//------------------------------------------------------------------------------
// FONCTION      : Inserer
// DESCRIPTION   : Insertion d'un Elt dans la Pile
//-------------------------------------------------------------------------------
  template <class T> 
  void Cl_Pile<T>::Inserer(Cl_Elt <T> *pElt){ 
  //Si le pElt est vide, on sort 
    if (!pElt) return; 
  
  //Si la Pile vide, on lui accroche l'Elt et on sort 
    if (pTete == NULL){ 
      pTete = pElt; 
      cout << "Création réussie!" << endl;
      return; 
    }//end if 

  //Création de deux pointeurs de déplacement dans la Pile et initilisation
    Cl_Elt<T> * courant = pTete; 
    Cl_Elt<T> * precedent = NULL; 
  
  //On se déplace à travers la Pile jusqu'a ce que courant atteint la valeur NULL
  //precedent memorise l'adresse du dernier Elt
    while (courant){ 
      precedent = courant; 
      courant = courant->suivant; 
    }//end while
 
  //Maintenant on place le nouvel Elt en fin de Pile
    precedent->suivant = pElt; 
    cout << "Création réussie!" << endl;
  }//end process 

//------------------------------------------------------------------------------
// FONCTION      : Depiler
// DESCRIPTION   : Retire un élément de la Pile et l'affiche
//-------------------------------------------------------------------------------
  template <class T> 
  void Cl_Pile<T>::Depiler(){ 

  //Si la Pile vide, on sort 
    if (pTete == NULL){ 
      cout << "Pile vide!" << endl;
      return; 
    }//end if 

  //Création de deux pointeurs de déplacement dans la Pile et initilisation
    Cl_Elt<T> * courant = pTete; 
    Cl_Elt<T> * precedent = NULL; 

  //On se déplace à travers la Pile jusqu'a ce que courant atteint la valeur NULL
  //precedent memorise l'adresse du dernier Elt
    while (courant){ 
      if (courant->suivant == NULL){
        cout << "| " << courant->valeur << " |" << endl;
        if (precedent != NULL) 
          precedent->suivant = NULL;
         else
           pTete = NULL;
        break; 
       }else{
         precedent = courant; 
         courant = courant->suivant; 
      }//end if
    }//end while
    delete courant; 

  }//end process 

//------------------------------------------------------------------------------
// FONCTION      : Affichage
// DESCRIPTION   : Affiche le contenu de la Pile à l'écran
//-------------------------------------------------------------------------------
  template <class T> 
  void Cl_Pile<T>::Affichage(){ 
 //Si pTete différent de NULL alors il affiche le contenu de la Pile
   if(pTete!=NULL){ 
      Cl_Elt<T> * courant = pTete; 
  
      while (courant){ 
        cout << "|" << courant->valeur; 
        courant = courant->suivant; 
      }//end while
      cout << "|" << endl;
   }else
       cout << "Pile vide!" << endl;
   //end if
  }//end process 
//------------------------------------------------------------------------------
// FONCTION      : TestPileVide
// DESCRIPTION   : Controle si la Pile est vide
//-------------------------------------------------------------------------------
  template <class T> 
  void Cl_Pile<T>::TestPileVide(){ 
    if(pTete==NULL) 
      cout << "\nPile vide!" << endl;
     else
       cout << "\nPile non vide!" << endl;
    //end if
  }//end process 
//------------------------------------------------------------------------------
//                      START PROGRAM TEST CLASS
//-------------------------------------------------------------------------------
  void main(){
     Cl_Pile <int> stack;
     stack.Empiler(5);
     stack.Empiler(10);
     stack.Affichage();
     stack.Depiler();
     stack.Depiler();
     stack.Depiler();
     cout << "Nombre d'éléments : " ;
     stack.NbrElements();
     stack.TestPileVide(); 


  }//end program
//------------------------------------------------------------------------------
//                      END PROGRAM TEST CLASS
//-------------------------------------------------------------------------------



 Historique

26 mai 2006 09:36:57 :
pas de mise à jour
25 juillet 2006 18:20:21 :
changement des includes

 Sources du même auteur

RÉCUPÉRATION DES DATES D'UN FICHIER EN CLAIR
GESTION DES SERVICES WINDOWS PAR LES API DANS UNE CLASSE
GESTION BASE DE REGISTRE (LOCAL OU DISTANTE)AVEC DES FONCTIO...
Source avec Zip CRÉATION D'UNE CLASSE CL_STRING (GESTION DES CHAÎNES)
GESTION D'UN ARBRE BINAIRE PAR LES CLASSES

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

COMPARAISON DES PERFORMANCE D'ALGORITHMES POUR OPTIMISER UN ... par fuliculi
Source avec Zip BIBLIOTHÈQUE DE GESTION DES PILES DYNAMIQUES EN C par Sunglasses
Source avec Zip BIBLIOTHÈQUE DE GESTION DES PILES STATIQUES EN C par Sunglasses
GESTION D'UN ARBRE BINAIRE PAR LES CLASSES par UKR6900
Source avec Zip Source avec une capture PROPA [SDL] par aerith

Commentaires et avis

Commentaire de BumpMANN le 06/03/2007 22:28:12

Heu... t'a pile empile ses éléments à la queue ? Oo; c'est pas pratique, on est obligé de parcourir toute la liste pour insérer son élément... ya pas moyen de les mettre en tete?

autre probleme (plus perso): si je veux par exemple mettre une pile de char*... okay, j'alloque ma chaine, je l'insere,... mais quand est-ce que je la libere ?

fin vala...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

trier d'une liste chainee en utilisant 2 piles [ par bella086 ] bsr voila j'ai un petit bon disant grand pblm sur c++ je dois charger une pile p1 a partir dune liste chainee et puis trier la pile p1 a laide d'une Communication PIC/PC via ethernet [ par smaya7 ] Bonjour, Je suis étudiante, et voilà mon premier projet personnel. Une petite idée qui consiste à faire une communication PIC PC via ethernet. Afin distribuer des cartes [ par korin221 ] Bonjour! Je réaliser un jeux de UNO en C. J'ai réaliser un pile dynamique ( utiliser pour les cartes ) Je voudrais savoir si cette méthode est utile ? pile dynamique [ par korin221 ] Bonjour! Voila j'ai un problème. Je voudrais mélanger ma pile dynamique de façon aléatoire. Peut on directement mélanger la pile ou alors passer la pi programme qui rassemble plusieurs petits programmes [ par imanova002 ] bonjour, j suis une débutante en programmation C, a peine j'essaie de faire des programmes de comparaison d'addition d nombres ... Mon problème c'est création de pile avec INTERFACE [ par rosettesouna ] [^^confus2] [b][size=100][/size][/b]slt tous le monde je suis debutante en C;et je veux savoir comment créer une pile on utilisant un tableau(pointe Augmenter la taille d'une pile [ par ssana83 ] Bonsoir, comment je peux augmenter la taille d'une pile en visual c++ pour éviter le problème de débordement de pile. Merci. Construction d'une pile avec une structure [ par sheep70400 ] Bonjour à tous,Voilà j'ai un petit problème avec une pile, je dois utiliser une structure :#define TAILLE 10    //taille de notre piletypedef struct{  Variable de type string en paramètre d'une fonction [ par sheep70400 ] Bonsoir à tous et à toutes,Je voudrais parcourir une chaine de caractère dans une variable de type string dans une fonction qui utilise une pile.int m Labyrinthe explication [ par tiquent ] Je cherche le maximum d'information m'aidant à la compréhension de cet algorithme de labyrintheUn ami à fait cet algorithme et je dois mettre en place


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales