La liste chaînée, exemple avec tri

Soyez le premier à donner votre avis sur cette source.

Vue 9 231 fois - Téléchargée 280 fois

Description

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

Source / Exemple :


#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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

BlackGoddess
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

ba ca sert a koi vu que le compilateur s'en charge..
>> 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++...
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
"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 ;)
roomsmush
Messages postés
16
Date d'inscription
mercredi 17 mars 2004
Statut
Membre
Dernière intervention
22 août 2005

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
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
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
hilairenicolas
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
randomize en C ==> srand(...)

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.

Du même auteur (roomsmush)