Trier une liste simplement chaine

Signaler
Messages postés
55
Date d'inscription
dimanche 13 décembre 2009
Statut
Membre
Dernière intervention
29 mars 2011
-
Messages postés
55
Date d'inscription
dimanche 13 décembre 2009
Statut
Membre
Dernière intervention
29 mars 2011
-
je veux faire le trie d'une liste chaine

mon code ne me donne pas le resulta juste

pouvez le couriger

#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)
{
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();
}



merci d'avance

4 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
1) quand tu échanges les valeurs min et precedent->info, tu modifies bien la valeur du premier noeud, mais tu ne modifies pas la valeur du noeud qui contient la valeur min! tu modifies simplement ta variable locale min.
2) parcour doit être réinitialisé avant la deuxième boucle while.

Pour le 1), je te suggères d'utiliser une variable noeud* min qui pointe sur le noeud qui contient la valeur min, plutot qu'une variable int.
Messages postés
55
Date d'inscription
dimanche 13 décembre 2009
Statut
Membre
Dernière intervention
29 mars 2011

on dois s'intereser a la fonction trier

je change un peux mais ca pas marche

void trier(list *l)
{
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=parcour->info; //changement
parcour>info=temp;
}
precedent=precedent->suivant;
}
}




SVP donne moi le code correcte de cette fonction

je vous donne le syntaxe au debut de la liste


C URGENT
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
Le but c'est que tu comprennes tout seul, si je te corrige le truc ça sert à rien. Relis mon premier post!
Messages postés
55
Date d'inscription
dimanche 13 décembre 2009
Statut
Membre
Dernière intervention
29 mars 2011

y ' t'il un exemple executable qui gere le trie d'une liste

je parle toujour de liste simplement chaine

pour comprendre mieux

car a ce moment je suis bloque