Comment trier une liste simplement chaine

Fermé
mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 - 10 janv. 2010 à 13:13
 es-said - 4 janv. 2013 à 13:34
Bonjour,


je n'arrive pas a faire le trie d'une liste simplement chaine (peu n'importe croissant ou decroissant)

merci d'avance

5 réponses

mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 7
10 janv. 2010 à 13:40
qu'esque vous pensez de ce code

c 'est un code complet contient ( 4 fonction avec main)

mais le probleme suppose toujour a la fonction trie

je parle toujour des liste simplement chaine







#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct noeud
{
int info;
struct noeud *suivant;
}noeud;

typedef struct
{noeud *tete;
}list;

void init(list *l)
{
l->tete=NULL;
}




void insertion_fin(list *l,int y)
{
noeud *e;
e=(noeud*)malloc(sizeof(noeud));
noeud *parcour =l->tete;
e->info=y;
e->suivant=NULL;
if(l->tete==NULL)
{
l->tete=e;
}
else
{
while(parcour->suivant!=NULL)
{
parcour=parcour->suivant;
}
parcour->suivant=e;
}
}





void trier(list *l) // le probleme est la
{
noeud *precedent=l->tete;
noeud *parcour=precedent->suivant;
int temp,min;
while(precedent!=NULL)
{
min=precedent->info;
while(parcour!=NULL)
{
if(parcour->info<min)
min=parcour->info;
parcour=parcour->suivant;
}
if(precedent->info!=min)
{
temp= precedent->info;
precedent->info=min;
min=temp;
}
precedent=precedent->suivant;
}
}

void afficher(list l)
{
noeud *parcour =l.tete;
while(parcour!=NULL)
{
printf("%7d",parcour->info);
parcour=parcour->suivant;
}

}




void main()
{
list l;
int n,vi;
init(&l);
printf("donnez le nombre des noeuds a inserer :");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("donnez une valeur : ");

scanf("%d",&v);
insertion_fin(&l,v);
}
trier(&l);
afficher(l);

getch();
}
3