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 !

LA LISTE CHAÎNÉE, EXEMPLE AVEC TRI


Information sur la source

Description

mon premier source sur ce site..
cree une liste chaînée et la tri
 

Source

  • #include <iostream>
  • using namespace std ; // ca c poour dev c++ sinon on met a la place de ces 2 lignes juste #include <iostream.h>
  • class liste // notre liste chaînée
  • {
  • public:
  • int n; //donnée
  • int r; //rang
  • liste *psuiv; //pointeur suivant
  • };
  • liste *pini=0; // pointeur initial
  • void creation(int i)
  • {
  • if(pini==0) // si on cree le premier element
  • {
  • pini=new liste() ; //on alloue de l'espace , on cree l'objet en fait
  • pini->n=i ; //on y met notre chiffre
  • pini->r=0; // rang=0
  • pini->psuiv=0; //ponteur suivant=0
  • }
  • else //si on cree un element qqconque
  • {
  • liste *p1=new liste();liste *p2=new liste();
  • int r=0;
  • p1=pini;
  • while(p1) // on passe d'un element au suivant jusqu'a ce que on tombe sur le dernier element qui a pour pointeur suivant 0
  • {
  • p2=p1;
  • p1=p1->psuiv;
  • r++; // on augmente le rang a chaque fois
  • }
  • p2->psuiv=new liste(); // on lui alloue de l'espace, on cree l'objet
  • p2->psuiv->n=i ; //...
  • p2->psuiv->r=r; //..
  • p2->psuiv->psuiv=0;
  • }
  • }
  • void affich() // affiche toute la liste
  • {
  • liste *p1=new liste();
  • cout <<"\n{";
  • p1=pini;
  • for(;;) // boucle infini
  • {
  • cout << p1->n; // on affiche l'element
  • p1=p1->psuiv; // on passe au suivant
  • if(p1==0) // si c'est le dernier on ferme l'accolade et on se casse
  • {
  • cout << "}" ;
  • return;
  • }
  • cout << ";";
  • }
  • }
  • void affich(int i) // affiche un element particulier : l'element n°i
  • {
  • liste *p1=new liste();
  • p1=pini;
  • while(p1->r!= i){p1=p1->psuiv;} //
  • cout <<"\nliste["<<i<<"]="<< p1->n;
  • return;
  • }
  • void tri() //tri de la liste
  • {
  • liste *p1=new liste(); liste *p2=new liste();
  • int n;
  • cout << "\ntri de la liste...";
  • int verif=1;
  • while(verif) // tant que verif est !=0 cad tant la procedure de tri fonctionne cad tant que le tri n'est pas terminé on tri
  • {
  • verif=0;
  • for(p2=pini; p2->psuiv ; p2=p2->psuiv ) // la boucle s'execute jusqu'a ce que p2 pointe le dernier element ( cad que p2->psuiv==0)
  • {
  • p1=p2;
  • while(p1->psuiv and p1->n <(p1->psuiv)->n) // tant que p1 n'est pas le dernier element et que p1 pointe un objet plus petit que l'objet suivant ...
  • {
  • n=p1->n ; // on decale p1 ...
  • p1->n=(p1->psuiv)->n; // on met ce qui a dans p1 dans l'element suivant cad p1->psuiv et ce qui a dans p1->psuiv on le met dans p1
  • (p1->psuiv)->n=n;
  • p1=p1->psuiv;
  • verif++;
  • }
  • }
  • }
  • return ;
  • }
  • int main(void)
  • {
  • int j ;
  • j=rand(); // chiffre aleatoire le probleme c'est qu'en fait y file systematiquement les
  • //memes chiffres pour regler le prbleme il faudrait mettre avant randomize(); mais ca marche pas avec dev c++
  • //si qqun a une soluce, ...
  • int h;
  • cout << "creation de la liste...";
  • for(int i=0;i<j;i++)
  • {
  • h=rand();
  • creation(h);
  • }
  • //sinon si vous voulez que ce soit l'utilisateur qui cree la liste alors mettez ca :
  • /*int h
  • while(h!=-999)
  • {
  • cout << "\nentrez un chiffre (entrez -999 pour quiter) ... \n" ;
  • cin >> h ;
  • creation(h) ;
  • } */
  • affich();
  • tri();
  • affich();
  • cout << "\nafficher quel element de la liste? " ;
  • cin >> h ;
  • affich(h);
  • cout << "\nthe end!\n" ;
  • system("PAUSE");
  • return 0;
  • }
#include <iostream>
using namespace std ; // ca c poour dev c++ sinon on met a la place de ces 2 lignes juste #include <iostream.h>

class liste // notre liste chaînée
{
  public:
   int n;  //donnée 
   int r;  //rang 
   liste *psuiv;  //pointeur suivant
};  
liste *pini=0; // pointeur initial
void creation(int i)
{
  if(pini==0) // si on cree le premier element
  {
    pini=new liste() ; //on alloue de l'espace , on cree l'objet en fait
    pini->n=i ; //on y met notre chiffre
    pini->r=0; // rang=0
    pini->psuiv=0; //ponteur suivant=0
  }
  else //si on cree un element qqconque
  {
    liste *p1=new liste();liste *p2=new liste();
    int r=0;
    p1=pini;
    while(p1) // on passe d'un element au suivant jusqu'a ce que on tombe sur le dernier element qui a pour pointeur suivant 0
    {
      p2=p1;
      p1=p1->psuiv;
      r++; // on augmente le rang a chaque fois
    }
    p2->psuiv=new liste(); // on lui alloue de l'espace, on cree l'objet 
    p2->psuiv->n=i ; //...
    p2->psuiv->r=r; //..
    p2->psuiv->psuiv=0; 
  }  
}
void affich() // affiche toute la liste
{
  liste *p1=new liste();
  cout <<"\n{";
  p1=pini;
  for(;;) // boucle infini
  {
    cout << p1->n; // on affiche l'element
    p1=p1->psuiv; // on passe au suivant
    if(p1==0) // si c'est le dernier on ferme l'accolade et on se casse
    {
      cout << "}" ;
      return;
    }
    cout << ";";
  }  
}
void affich(int i) // affiche un element particulier : l'element n°i
{
  liste *p1=new liste();
  p1=pini;
  while(p1->r!= i){p1=p1->psuiv;} //
  cout <<"\nliste["<<i<<"]="<< p1->n;
  return; 
} 
void tri() //tri de la liste 
{
  liste *p1=new liste(); liste *p2=new liste();
  int n;
  cout << "\ntri de la liste...";
  int verif=1;
  while(verif) // tant que verif est !=0 cad tant la procedure de tri fonctionne cad tant que le tri n'est pas terminé on tri 
  {
    verif=0;
    for(p2=pini;   p2->psuiv ; p2=p2->psuiv ) // la boucle s'execute jusqu'a ce que p2 pointe le dernier element ( cad que p2->psuiv==0)
    {    
      p1=p2;
      while(p1->psuiv and p1->n <(p1->psuiv)->n) // tant que p1 n'est pas le dernier element et que p1 pointe un objet plus petit que l'objet suivant ...
      {                                           
        n=p1->n ;               // on decale p1  ...                   
        p1->n=(p1->psuiv)->n;   // on met ce qui a dans p1 dans l'element suivant cad p1->psuiv et ce qui a dans p1->psuiv on le met dans p1                  
        (p1->psuiv)->n=n;                          
        p1=p1->psuiv;                              
        verif++;
      }
    }
  }     
  return ;   
} 

int main(void) 
{
  
  int j ;
  
  j=rand(); // chiffre aleatoire le probleme c'est qu'en fait y file systematiquement les
            //memes chiffres pour regler le prbleme il faudrait mettre avant randomize(); mais ca marche pas avec dev c++
            //si qqun a une soluce, ... 
    
  int h;
  cout << "creation de la liste...";
  for(int i=0;i<j;i++)
  {
  h=rand();
  creation(h);  
  }
 //sinon si vous voulez que ce soit l'utilisateur qui cree la liste alors mettez ca : 
 /*int h 
    while(h!=-999)
    {
     cout << "\nentrez un chiffre (entrez -999 pour quiter) ... \n" ; 
     cin >> h ; 
     creation(h) ; 
     } */
  affich(); 
  tri();
  affich();
  cout << "\nafficher quel element de la liste? " ;
  cin >> h ; 
  affich(h);
  cout << "\nthe end!\n" ;  
  system("PAUSE");
  return 0;
}

Conclusion

cette source marche farpaitement sous dev-c++, je sais pas pour borland ou visualc++

je cherche comment on affiche un bmp dans un fenetre avec dev-c++ si qqun peut m'aider ce serait sympa

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de hilairenicolas le 31/03/2004 17:11:15

randomize en C ==&gt; srand(...)

signaler à un administrateur
Commentaire de djl le 31/03/2004 17:36:30

c'est bizar ca?? a part le mot cle class, de l'usage de cin,cout,new c'est une source en c...
tu devrai faire ca en poo, ce serait mieux

ca marche mais tu libere jamais tes pointeurs?

pour le using namespace std ; c'est pas vraiment ca

signaler à un administrateur
Commentaire de roomsmush le 02/04/2004 13:52:37

ba ca sert a koi vu que le compilateur s'en charge..
mais c'est vrai que c'est pas bien !!!!  je vais y remedier

signaler à un administrateur
Commentaire de djl le 02/04/2004 17:44:01

"Sur certains compilateurs, la non libération des ressources allouées est prise en charge et corrigée, avec plus ou moins de succès."

donc dans tous les cas ta solution meme si elle marche n''est pas standart ;)

signaler à un administrateur
Commentaire de BlackGoddess le 05/04/2004 15:46:07

ba ca sert a koi vu que le compilateur s'en charge..
&gt;&gt; a pas coder comme un goret ... puis ya pas de garbage collector par defaut en C ou en C++, alors imagine tu bosses 1000000000 fois sur un objet en boucle par exemple) que tu alloues a chaque fois mais que tu liberes pas, ca doit pas etre beau a voir ...

en C, chaque malloc va avec un free, en C++ chaque new va avec un delete. et sinon on evite de mélanger le C et le C++...

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


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 : 0,328 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é.