Bonjour à tous,

je vous expose mon problème:

voici une fonction qui recoit en paramètre une liste doublement chainée (bornes*).

Cette liste comprend des elements définit comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
struct element {
             void* type; 
             element* suivant; 
             element* precedent
};
element* PElement;
Le pointeur sur void type recoit une structure définit comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
struct participant{
            ......
            int pointsQualif;
            .....
};
Mon problème est que je n'arrive pas à trier cette liste donné en paramètre en fonction des pointsQualif. J'ai voulu implémenter un tri à bulle mais je dois me planter quelques part et je ne vois pas où.
Pour être complet, la liste passé en paramètre est correctement constituée.
Mon idée est de trier cette liste sur les pointsQualif, donc je pensais pouvoir, une fois comparé, juste échanger les adresses présentes dans les variables type. Mais ca coince
Avez vous quelques idées pour me sortir de ce gouffre?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
 
bornes* triPtsQualification(bornes* lst){
	int cpt, courant, debug; 
	int inversion,longueur;
 
	longueur = NombreDElements(lst);
 
	participant* paPremier = (participant*) malloc (sizeof(participant));
	participant* paSecond = (participant*) malloc (sizeof(participant));
 
	PElement pePremier = (PElement) malloc (sizeof(element));
	PElement peSecond = (PElement) malloc (sizeof(element));
	PElement peTampon = (PElement) malloc (sizeof(element));
 
	pePremier = lst->premier;
	//peSecond = pePremier->suivant;
	debug = 0;
	do{
		inversion = 0;
		debug++;
			for(courant = 0; courant<longueur-1; courant++){
				paPremier = (participant*) pePremier->type;
				paSecond = (participant*) pePremier->suivant->type;
				if(paPremier->pointsQualif > paSecond->pointsQualif){
					peTampon->type = pePremier->type;
					pePremier->type = peSecond->type;
					peSecond->type = peTampon->type;
					inversion = 1;
				}
				paPremier = (participant*) malloc (sizeof(participant));
				paSecond = (participant*) malloc (sizeof(participant));
				pePremier = pePremier->suivant;
				longueur--;
			}
 
	}while(inversion == 1);
return lst;
}
Merci à tous,