begin process at 2012 02 12 12:45:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > LA LISTE CHAÎNÉE, EXEMPLE AVEC TRI

LA LISTE CHAÎNÉE, EXEMPLE AVEC TRI


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :31/03/2004 Vu / téléchargé :8 086 / 219

Auteur : roomsmush

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

 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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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

Commentaires et avis

Commentaire de hilairenicolas le 31/03/2004 17:11:15

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

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

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

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 ;)

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,702 sec (3)

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