#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;
}