IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Tri d'une liste déjà remplie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut Tri d'une liste déjà remplie
    Bonjour,

    En effet j'ai un probleme avec le trie une liste dans l'ordre croissant déja remplir que je fournit à une fonction qu'il le trie en fonction des valeur quand j'execute il m'affiche un message soit disant que le probleme est sur mon instruction if: si quelqu'un a une idée de ou sait exactement je vous remercie.

    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
    
    tmp = NULL;
    head = list_ordonne; //  liste à trie
    precedent = head->listsuiv; // suivant dans la liste
    // boucle while de la fonction de trie 
    
    while(precedent != NULL){
    
    
    if(head->list->val <= precedent->list->val)
    
    {
    tmp = precedent;
    precedent = precedent->listsuiv;
    head = tmp;
    }
    head = head->listsuiv;
    }
    
    return list_ordonne;

  2. #2
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut deux choses
    Premierement tu devrais ponctuer tes phrases, ta question est peu comprehensible.
    Deuxiemement peut tu donner le detail des structures que tu utilises ? Quand tu ecris
    head->list->val cela ne veut rien dire si on ne sait pas quels champs contiennent tes stuctures
    La ca voudrait dire que tu as une liste chainee qui contient d'autres listes chainees contenant un entier. Est-ce bien le cas?

  3. #3
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Citation Envoyé par boula
    il m'affiche un message soit disant que le probleme est sur mon instruction if
    Le probleme ? c'est vaste ça !!
    C'est quoi le message d'erreur ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    Dans tout c'est de pointeurs que je manipule: point sur des listes et des pointeurs sur les elements des liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    0x08049a83 in list_ord (list=0x840c3a8) at oct.c:1105
    1105    if(head->list->val > precedent->list->val)
    Missing separate debuginfos, use: debuginfo-install glibc.i686

  5. #5
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut ???
    j'ai rien compris. Mets le code des tes structures si tu veux qu'on comprenne quelque chose.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    C'est amusant d'appeler 'precedent' ce qui semble designer le suivant.
    Ta boucle est conditionnée par 'precedent!=NULL'. Or, ton pointeur 'head' peut avancer indépendamment de 'precedent'. Donc tu ne teste jamais le cas où tu arrive à la fin de ta liste avec 'head' avant 'precedent'. D'ou probablement un
    adressage de NULL.
    Enfin, si tu arrives à faire un tri avec un simple parcours de ta liste (donc en N) alors merci de publier l'algo. Tu révolutionnes l'informatique. Pour un algo simple, tu seras en N2 (deux boucles imbriqués), pour un algo optimisé ce sera du nlog(n) (tri optimaux). Cf http://fr.wikipedia.org/wiki/M%C3%A9thode_de_tri

  7. #7
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    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
     
     
    struct list_elt{
    int ident;
    int val;
    }
     
    struct comp_list{
    list_elt  *list;
    comp_list  *suiv;
    }
     
    Voila mes structure:
     
    compt_list  *head, precedent, tmp ;
     
    list_elt  *list;

  8. #8
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut c'est le bordel!
    Tu as bien une liste chainee de liste chainee, mais je comprends pas ce que tu veux trier?
    Tu veux trier chaque liste chainee de ta liste chainée comp_list?
    J'ai l'impression que ton code est tout faux. Tu déclares precedent comme une comp_list, mais dans ton code tu ecris precedent->listsuiv alors que precedent n'est pas un pointeur tel que tu l'as définis, et de plus listsuiv ne correspond à rien dans ton code.
    Bref reprends tout parce que là pas grand chose ne tient la route j'ai l'impression. Ou alors j'ai ptre rien compris?

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Pour une liste chaînée, je pense qu'un tri fusion (merge sort) serait un assez bon algorithme...
    D'un autre côté, je n'ai jamais essayé cela sur une liste simplement chaînée...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    En faite la taille de mes liste ne depasse pas 15 element raison pour laquelle je recherche le moyen le moins encombrant à mes yeux en terme de complexité.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct comp_list{
    list_elt  *list;
    comp_list  *listsuiv;
    }

Discussions similaires

  1. [SQL] Tri d'une liste!!!
    Par frutix dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/02/2006, 10h00
  2. [Requête] Tri via une liste déroulante
    Par Burnout dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/01/2006, 18h16
  3. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  4. [TRI] tri d'une list provenant de LabelValueBean
    Par Canou dans le forum Struts 1
    Réponses: 6
    Dernier message: 20/09/2004, 14h55
  5. tri d'une liste
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2003, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo