Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GESTION D'UNE FILE PAR LES CLASSES


Information sur la source

Catégorie :Maths & Algorithmes Classé sous : alorithme, algo Niveau : Débutant Date de création : 28/05/2006 Date de mise à jour : 25/07/2006 18:21:12 Vu : 3 066

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

Exemple de la gestion d'une File élémentaire en utilisant une classe dynamique.
File  de type LIFO  Last In First Out = mêle procédé que la Pile avec une petite modif dans
la procédure "Defiler".
Ce code à été compilé avec Borland C++ 5.5 (sans Bug apparent)

 

Source

  • #include <stdio.h>
  • #include <iostream>
  • using namespace std;
  • template <class T> class Cl_File;
  • //--------------------------------------------------------
  • // 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(){delete suivant;NbrElts--;};
  • friend class Cl_File <T> ;
  • };//end class
  • //--------------------------------------------------------
  • // FIN CLASSE Cl_Elt
  • //--------------------------------------------------------
  • template<class T>
  • int Cl_Elt<T>::NbrElts = 0;
  • //--------------------------------------------------------
  • // DEBUT CLASSE Cl_File
  • //--------------------------------------------------------
  • template <class T>
  • class Cl_File{
  • private:
  • void Inserer(Cl_Elt <T> *);
  • public:
  • Cl_Elt<T> *pDebut;
  • Cl_File(){pDebut=NULL;};
  • ~Cl_File(){delete pDebut;};
  • void EmFiler (const T);
  • void DeFiler();
  • void Affichage();
  • void TestFileVide();
  • int NbrElements(void){return Cl_Elt <T>::NbrElts;};
  • };//end class
  • //--------------------------------------------------------
  • // FIN CLASSE Cl_File
  • //--------------------------------------------------------
  • //------------------------------------------------------------------------------
  • // FONCTION : EmFiler
  • // DESCRIPTION : Création d'un Elt et Empilage dans la File
  • //-------------------------------------------------------------------------------
  • template<class T>
  • void Cl_File<T>::EmFiler(T val){
  • //Allocation memoire pour un nouveau Elément de la File.
  • Cl_Elt <T> * pEltTmp = new Cl_Elt <T>;
  • //Initialisation du pointeur pElt à NULL
  • pEltTmp->suivant = NULL;
  • //Transfert de la valeur
  • pEltTmp->valeur = val;
  • //Insérer dans la File
  • Inserer (pEltTmp);
  • }//end process
  • //------------------------------------------------------------------------------
  • // FONCTION : Inserer
  • // DESCRIPTION : Insertion d'un Elt dans la File
  • //-------------------------------------------------------------------------------
  • template <class T>
  • void Cl_File<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 (pDebut==NULL){
  • pDebut = _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 = pDebut;
  • 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 : DeFiler
  • // DESCRIPTION : Retire un élément de la File et l'affiche
  • //-------------------------------------------------------------------------------
  • template <class T>
  • void Cl_File<T>::DeFiler(){
  • //Si la File vide, on sort
  • if (pDebut == NULL){
  • cout << "File vide!" << endl;
  • return;
  • }//end if
  • Cl_Elt<T> * courant = pDebut;
  • cout << "|" << courant->valeur << "|" << endl;
  • pDebut = courant->suivant;
  • delete &courant;
  • }//end process
  • //------------------------------------------------------------------------------
  • // FONCTION : Affichage
  • // DESCRIPTION : Affiche le contenu de la File à l'écran
  • //-------------------------------------------------------------------------------
  • template <class T>
  • void Cl_File<T>::Affichage(){
  • //Si pTete différent de NULL alors il affiche le contenu de la File
  • if(pDebut!=NULL){
  • Cl_Elt<T> * courant = pDebut;
  • while (courant){
  • cout << "|" << courant->valeur;
  • courant = courant->suivant;
  • }//end while
  • cout << "|" << endl;
  • }else
  • cout << "File vide!" << endl;
  • //end if
  • }//end process
  • //------------------------------------------------------------------------------
  • // FONCTION : TestFileVide
  • // DESCRIPTION : Controle si la File est vide
  • //-------------------------------------------------------------------------------
  • template <class T>
  • void Cl_File<T>::TestFileVide(){
  • if(pDebut==NULL)
  • cout << "\nFile vide!" << endl;
  • else
  • cout << "\nFile non vide!" << endl;
  • //end if
  • }//end process
  • //------------------------------------------------------------------------------
  • // START PROGRAM TEST CLASS
  • //-------------------------------------------------------------------------------
  • void main(){
  • Cl_File <int> stack;
  • stack.EmFiler(5);
  • stack.EmFiler(10);
  • stack.EmFiler(7);
  • stack.Affichage();
  • stack.DeFiler();
  • stack.DeFiler();
  • stack.DeFiler();
  • stack.DeFiler();
  • cout << "Nombre Elts = " << stack.NbrElements() << endl;
  • }//end program
  • //------------------------------------------------------------------------------
  • // END PROGRAM TEST CLASS
  • //-------------------------------------------------------------------------------
#include <stdio.h>
#include <iostream>
 using namespace std;

template <class T> class Cl_File;
//--------------------------------------------------------
//                      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(){delete suivant;NbrElts--;};
      friend class Cl_File <T> ;
  };//end class 
//--------------------------------------------------------
//                      FIN CLASSE Cl_Elt
//--------------------------------------------------------
  template<class T> 
  int Cl_Elt<T>::NbrElts = 0;

//--------------------------------------------------------
//                      DEBUT CLASSE Cl_File
//--------------------------------------------------------
  template <class T> 
  class Cl_File{ 
    private:
      void Inserer(Cl_Elt <T> *);
    public: 
      Cl_Elt<T> *pDebut; 
      Cl_File(){pDebut=NULL;};
      ~Cl_File(){delete pDebut;};
      void EmFiler (const T); 
      void DeFiler();
      void Affichage();
      void TestFileVide();  
      int NbrElements(void){return Cl_Elt <T>::NbrElts;}; 
  };//end class 
//--------------------------------------------------------
//                      FIN CLASSE Cl_File
//--------------------------------------------------------
//------------------------------------------------------------------------------
// FONCTION      : EmFiler
// DESCRIPTION   : Création d'un Elt et Empilage dans la File
//-------------------------------------------------------------------------------
  template<class T> 
  void Cl_File<T>::EmFiler(T val){
  //Allocation memoire pour un nouveau Elément de la File. 
    Cl_Elt <T> * pEltTmp = new Cl_Elt <T>; 

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

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

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

  }//end process

//------------------------------------------------------------------------------
// FONCTION      : Inserer
// DESCRIPTION   : Insertion d'un Elt dans la File
//-------------------------------------------------------------------------------
  template <class T> 
  void Cl_File<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 (pDebut==NULL){ 
      pDebut = _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 = pDebut; 
    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      : DeFiler
// DESCRIPTION   : Retire un élément de la File et l'affiche
//-------------------------------------------------------------------------------
  template <class T> 
  void Cl_File<T>::DeFiler(){ 

  //Si la File vide, on sort 
    if (pDebut == NULL){ 
      cout << "File vide!" << endl;
      return; 
    }//end if 
    Cl_Elt<T> * courant = pDebut; 

    cout << "|" << courant->valeur << "|" << endl;
    pDebut = courant->suivant;

    delete &courant; 

  }//end process 

//------------------------------------------------------------------------------
// FONCTION      : Affichage
// DESCRIPTION   : Affiche le contenu de la File à l'écran
//-------------------------------------------------------------------------------
  template <class T> 
  void Cl_File<T>::Affichage(){ 
 //Si pTete différent de NULL alors il affiche le contenu de la File
   if(pDebut!=NULL){ 
      Cl_Elt<T> * courant = pDebut; 
  
      while (courant){ 
        cout << "|" << courant->valeur; 
        courant = courant->suivant; 
      }//end while
      cout << "|" << endl;
   }else
       cout << "File vide!" << endl;
   //end if
  }//end process 
//------------------------------------------------------------------------------
// FONCTION      : TestFileVide
// DESCRIPTION   : Controle si la File est vide
//-------------------------------------------------------------------------------
  template <class T> 
  void Cl_File<T>::TestFileVide(){ 
    if(pDebut==NULL) 
      cout << "\nFile vide!" << endl;
     else
       cout << "\nFile non vide!" << endl;
    //end if
  }//end process 
//------------------------------------------------------------------------------
//                      START PROGRAM TEST CLASS
//-------------------------------------------------------------------------------
  void main(){
     Cl_File <int> stack;
     stack.EmFiler(5);
     stack.EmFiler(10);
     stack.EmFiler(7);
   stack.Affichage();
     stack.DeFiler();
     stack.DeFiler();
     stack.DeFiler();
     stack.DeFiler();
     cout << "Nombre Elts = " << stack.NbrElements() << endl;
  }//end program
//------------------------------------------------------------------------------
//                      END PROGRAM TEST CLASS
//-------------------------------------------------------------------------------

Conclusion

Ceci n'est qu'un modéle élémentaire qui respecte normalement le procédé LIFO.

 

Historique

25 juillet 2006 18:21:12 :
changement des includes

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

algo des [ par fredson ] je recherche le programme pour trouver divers clés de décryptage avec l'algo des(cryptage) une aide pour écrire un algo et un prog sur le nbr premiers [ par Julius Caesar ] Bonjour, je n'arrive pas écrire l'algo et le prog de ce sujet:"Ecrivez un algo et un prog, qui affiche les nbrs premiers inferieurs à un entier n (ave je suis desespere, algo d'incrementation de tableau [ par scorpiwolf ] Je deviens fou, je suis en train de faire la division euclidienne avec des nombres immenses, ils sont stockés dans des tableaux. Bon bref le probleme Algo minimax, negamax [ par Galett ] Salut, je m'fai un ti prog en ce moment, mais G des probs avec mon algo minimax, G tester le negamax aussi et ca change po.Je recherche en fait un alg Aidez moi !!!! [ par sebastienbro ] Voilà, g une fonction créé en C++ avec VC++. Elle marche très bien si elle est mis dans un EXE, mais dès k'elle est ds une DLL, ca marche plus !!Avec Algo de Cryptage [ par LordBob ] Salut a tous, je voudrai simplement avoir kelke info pour créé un algorithme de cryptage, savoir comment ca ce passe, ce kil fo faire un peu tout ko j'aimerais connaitre le principe de l'algo de rar [ par Odinlemage ] Bonjour à tous...Voila mon probleme est que j'aimerais connatire le principe algorithmique de la compression rarJ'ai eut beau cherché j'ai rien trouvé probleme de getch() et d'algo de curseur [ par kobee12 ] J'utilise comme compilateur dev-c++.Lorsque je fais un getch(), je suis oblige de taper enter apres alors que j'aimerais juste taper une touche et qu' inverser une matrice non carrée [ par civata ] est ce que quelqu'un peut me dire comment on inverse une matrice non carrée ?ou plutot où je pourrais trouver un algo qui le fait, pour les matrices c algo JPG->BMP [ par MoDDiB ] Il n'y aurais pas un site qu'y explikerait l'algo pour transformer un jpg en bmp?? ca sré sympataoche de me dire ou ^^merci !(les sources du concours


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 11,014 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.