Programmation liste chainées

shinn Messages postés 48 Statut Membre -  
lucieb31 Messages postés 363 Statut Membre -
Bonjour,

Je sollicite votre aide pour m'aider à réaliser une liste chaînée ordonnée. Chaque participant se voit octroyer un temps, et c'est en fonction de ce temps que je doit ordonner la liste.

voilà le programme que j'ai fait :

if (tmp != 0 && strcmp(ntmp,"0")!=0)
{
/*********************CREATION LISTE DES QUALIFIES********************/

/******* Insertion entête *******/
if (p1==NULL)
{
printf("\nje suis a la creation d'entete liste 1\n");
p1=(struct Skieur *) malloc (sizeof (struct Skieur));

premier=p1;
strcpy(p1->name,ntmp);
printf("\nle nom est : %s\n",p1->name);
p1->tp1=tmp;
p1->suivant=NULL;
}

else
{

/******** Insertion des elements dans la liste***********/
printf("\nje suis a la creation de la suite liste 1\n");
p1=premier;
//premier = p1;
q1=(struct Skieur *) malloc (sizeof (struct Skieur));
strcpy(q1->name,ntmp);
printf("\nle nom est : %s\n",q1->name);
q1->tp1=tmp;
if (q1 == NULL)
{
printf("liste vide");
}
else
{
while(p1->suivant!=NULL && tmp > p1->tp1)
{
printf("%d\t%d",p1->tp1,tmp);
p1 = p1->suivant;
}
}
q1->suivant = p1->suivant;
p1->suivant = q1;
q1->precedent = p1;
}

}

le but de ce programme est de créer un liste triée, seulement le tri ne se fai pas bien du tout:

LISTE DES QUALIFIES DE LA PREMIERE MANCHE:

A la place n.1: a avec un temps de: 124 s
A la place n.2: g avec un temps de: 41 s
A la place n.3: f avec un temps de: 12 s
A la place n.4: z avec un temps de: 145 s
A la place n.5: r avec un temps de: 127 s
A la place n.6: e avec un temps de: 562 s
A la place n.7: q avec un temps de: 248 s
A la place n.8: y avec un temps de: 426 s
A la place n.9: t avec un temps de: 854 s
A la place n.10: s avec un temps de: 965 s
A la place n.11: d avec un temps de: 968 s

LISTE DES DISQUALIFIES DE LA PREMIERE MANCHE:

Appuyez sur une touche pour continuer...

Process returned 0 (0x0) execution time : 47.290 s
Press any key to continue.

voilà j'ai entrée des valeurs au hasard et le tri se fait très très mal.
Je pense que cela vient d'une erreur de ma part, mais je ne sais pas ou.
Si vous avez besoin d'info supplémentaires, je ss dispo toute la soirée.
merci d'avance

A voir également:

2 réponses

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Premier problème, tu ne traite jamais le cas où le temps de q1 est plus petit que le temps de premier. Parant de le là, tout les temps inférieurs à 124 seront mal classer. Après, pourquoi 145 est mal placer, je ne sais pas...
je voi que tu as un champ precedent. Tu l'utilises mal, car tu ne le mets pas complétement à jour.
0
lucieb31 Messages postés 363 Statut Membre 62
 
Comme l'a dit char sniper, si le temps de q1 est plus petit que le temps de p1 il faut pas que tu fasse :
q1->suivant = p1->suivant;
p1->suivant = q1;
q1->precedent = p1;
mais plutot :
q1->suivant = p1;
q1->precedent = p1->precedent;
p1->precedent = q1;
Sachant que dans ton insertion entete, il faut que tu mette p1 ->precedent = NULL.
145 est mal placé pck il est plus grand que les precedent donc il se met a la suite.
0