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 une liste chainée


Sujet :

C

  1. #1
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut tri une liste chainée
    bonjours quelqu'un aurait-il l amabilité de me dire comment on peux trié une liste de structure ? parce que j essaye avec les pointeurs sa marche pas.
    je vous met le code si sa peu vous servir mais je pense pas.

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct{
        char nom[11];
        struct personne *suivant;
    }personne;
    main()
    {
     
        personne *debut,*suivant,*encourt,*intercaler,*tmp;
        int nb=0,i;
     
        FILE *fdat = fopen("noms.dat","r");
     
        encourt = malloc(sizeof(personne));
        debut = encourt;
     
        fscanf(fdat,"%s",encourt->nom);
     
        while(!feof(fdat))
        {
            nb++;
            suivant = malloc(sizeof(personne));
            encourt->suivant = suivant;
            encourt = suivant;
     
            fscanf(fdat,"%s",encourt->nom);
     
            intercaler = debut;
            for(i=0;i<nb;i++)
            {
                if(strcmp(encourt->nom,intercaler->nom)==0)
                {
                    tmp = intercaler->suivant;
                    intercaler->suivant = encourt->suivant;
                    encourt->suivant = tmp;
                }
                intercaler = intercaler->suivant;
            }
        }
     
        encourt = debut;
        for(i=0;i<nb;i++)
        {
            printf("%-10s\n",encourt->nom);
            encourt = encourt->suivant;
        }

  2. #2
    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
    Déjà, quel algorithme de tri utilises-tu?
    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.

  3. #3
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Par défaut
    bin il doit mettre dans la liste au bon endroit lors de la lecture

  4. #4
    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
    Tu veux dire que tu tries dès l'insertion? OK.

    Je pense que le problème est dans la liaison encours/suivant.
    Mes conseils: Essaie de faire plus de fonctions, et utilise des pointeurs de pointeurs pour ton parcours.

    Ainsi, tu pourrais avoir:
    • Une fonction qui retourne un pointeur vers le pointeur du premier élément suivant la clé à insérer (ici, le nom),
    • Une fonction qui appelle la précédente pour trouver où insérer et faire l'insertion.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    personne ** RecherchePtr(
     personne ** ppPremier, /*[in] Adresse du pointeur "début de liste"*/
     char const *nom /*[in] Clé recherchée*/
     ); /*Retourne pointeur vers pointeur vers l'objet trouvé ou le suivant*/
     
    void Insertion(
     personne ** ppPremier, /*[in] Adresse du pointeur "début de liste"*/
     personne * pNouveau /*[in] Structure à insérer*/
     );
    Essaie de voir quoi mettre dans ces fonctions, je t'aiderai en cas de problème.
    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.

Discussions similaires

  1. Tri sur une liste chainée
    Par Leclandestin dans le forum C++
    Réponses: 5
    Dernier message: 21/03/2011, 18h22
  2. Tri par insertion sur une liste chainé simple.
    Par loula427 dans le forum Débuter
    Réponses: 6
    Dernier message: 21/03/2011, 14h54
  3. tri dans une liste chainée.
    Par cedrico2010 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/02/2011, 17h51

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