• # tri avec un comparateur en argument

    Posté par (courriel, site web personnel) . En réponse au message Listes chainées doubles et tri. Évalué à 4.

    Commence par séparer les données de la structure de la liste comme le propose netsurfeur, après pour trier tu n'as plus qu'à écrire une fonction qui prend un pointeur de fonction type "int comparateur(COTATION *c1, COTATION *c2)" et qui l'utilise pour déterminer l'ordre de la liste. Ta fonction aura comme prototype un truc genre:
    void sort_list(CHAINE *list, int (*comparator)(const COTATION*,const COTATION*))
    Après quand tu veux trier ta liste selon l'un ou l'autre critère, tu appelles toujours la même fonction mais tu lui passe un comparateur différent.

    En fait j'ai écrit cett e fonction il y a quelques jours. C'est du C++ qui marche sans doute pas (finalement j'ai utilisé la STL) mais l'idée y est: http://krunch.servebeer.com/~krunch/vrac/cours/05-06-1linf/c(...) (la méthode StringNode::qsort()). Tu trouvera sans doute un exemple plus propre (et fonctionnel) en lisant le code du qsort() de la glibc mais qui lui s'applique aux tableaux.

    Rien à voir mais il y a aussi moyen de gagner de la place en ne stockant qu'un seul pointeur par noeud: tu xor les deux pointeurs et tu utilises l'adresse d'où tu viens pour "décoder" l'adresse suivante. En plus avec ce truc ta liste est inversible en temps constant. http://www.chiark.greenend.org.uk/~sgtatham/algorithms/revli(...)
    (c'était la minute hors sujet mais c'est toujours bon à savoir)

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.