Apres beaucoup d'heures passé à essayer de trier une liste simplement chainé sur un élément de la structure qui compose la liste, et après avoir essuyer beaucoup d'echec, deux solutions me sont offertes : acheter une corde et aller me pendre, ou simplement demander à des kadors du c comment on fait !!!
pour vous aider, voici des parties de mon codes :
Mes structures :
typedef struct voiture{ char numero[9]; int annee; char marque[10]; char modele[10]; int prix; struct voiture * suivant; //pointeur sur l'element suivant }t_voiture;
typedef struct{ t_voiture* premiere; int nb; }Ensemble;
|
Ma fonction échanger :
void echanger(Ensemble *parc, int i){ int j; t_voiture* prec = (t_voiture *) malloc ( sizeof (t_voiture)); t_voiture* suiv = (t_voiture *) malloc ( sizeof (t_voiture)); t_voiture* temp = (t_voiture *) malloc ( sizeof (t_voiture)); temp=(*parc).premiere; for (j=1; j<i; j++){ temp=(*temp).suivant; } suiv=(*temp).suivant; prec=suiv; suiv=temp; }
|
Ma fonction de tri
void tri(Ensemble* parc, int type){ t_voiture* temp; int k, n, inversion; temp=(*parc).premiere; n=(*parc).nb; do{ inversion=0; for (k=0; k<n-2; k++){ switch(type){ case 1 : if ((*temp).annee>(*(*temp).suivant).annee){ echanger(parc,k); inversion=1; } break; case 2 : if (strcomp((*temp).marque, (*(*temp).suivant).marque)>0){ echanger(parc,k); inversion=1; } break; case 3 : if ((*temp).prix>(*(*temp).suivant).prix){ echanger(parc,k); inversion=1; } break; } temp=(*temp).suivant; } n--; } while (inversion); } |
et la comment je l'appelle :
Voila, si quelqu'un peut m'aider... Merci
----fab30----