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 :

fonction de recherche dans une liste chainée


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut fonction de recherche dans une liste chainée
    salut. Mon probleme est le suivant : j'ai une liste chainée definie par :
    une structure client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct 
    {
       char nom[20],prenom[20],tel[20],age[2] ;
    }client;
    je voudrai creer une fonction pour rechercher un client,
    le principe de la fonction est de demander a l'utilisateur d'entrer
    les informations(nom,prenom ...) et de mettre 'x' dans les schamps a ne pas prendre en consideration .

    merci pour votre aide .

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par seifvai Voir le message
    Mon probleme est le suivant : j'ai une liste chainée definie par :
    une structure client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct 
    {
       char nom[20],prenom[20],tel[20],age[2] ;
    }client;
    je voudrai creer une fonction pour rechercher un client,
    le principe de la fonction est de demander a l'utilisateur d'entrer
    les informations(nom,prenom ...) et de mettre 'x' dans les schamps a ne pas prendre en consideration .
    Tu as oublié de poster le code avec lequel tu as un problème...

    Nota : l'élément que tu as montré n'est pas un élément de liste chainée...

    http://emmanuel-delahaye.developpez....s_chainees.htm

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par seifvai Voir le message
    salut. Mon probleme est le suivant : j'ai une liste chainée definie par :
    une structure client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct 
    {
       char nom[20],prenom[20],tel[20],age[2] ;
    }client;
    je voudrai creer une fonction pour rechercher un client,
    le principe de la fonction est de demander a l'utilisateur d'entrer
    les informations(nom,prenom ...) et de mettre 'x' dans les schamps a ne pas prendre en consideration .

    merci pour votre aide .
    cette structure de données ne permet pas le chaînage et la construction d'une liste

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut
    desolé ,c'etai juste pour alleger l'ecriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct
     {
       int age,type,cle;
      char nom[20],prenom[20],tel[9]; 
     }client ;  
     
    typedef struct element
    { 
      client *cl  ;     
      struct  element *suivant; 
     
    }tlist;

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    n'oublie pas la balise code (le #)..

    mais ça ne change pas le pbe..

    Si c'est un élément d'une liste chainée, ce serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct pclient
    {
    int age,type,cle;
    char nom[20],prenom[20],tel[9]; 
    pclient  *next ;
    }client ;

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Si c'est un élément d'une liste chainée, ce serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct pclient
    {
    int age,type,cle;
    char nom[20],prenom[20],tel[9]; 
    pclient  *next ;
    }client ;
    C'est possible aussi, mais la structure que le P.O. a récemment présenté et tout à fait valable...

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut
    pour chaque critere de recherche j'ai creer une fonction .
    exemple pour rechercher un nom :

    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
    tlist *r_nom(tlist *L, client *temp2)
    {
      tlist *tmp,*LR ;  
       tmp = L;
       while( tmp!=NULL)
        {
     
         if (strcmp(tmp->a->nom,temp2->nom)==0)
           {
             LR = inserer_entete(LR,tmp->cl) ;
           }
         else
            tmp = tmp->suivant ;
        }
       return LR ;
    }

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut
    Mais pour la fonction principale, je bloque .

  9. #9
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut
    desolé, rectification de la fonction rechercher nom :
    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
    tlist *r_nom(tlist *L, client *c)
    {
      tlist *tmp,*LR ;  
       tmp = L;
       while( tmp!=NULL)
        {
     
         if (strcmp(tmp->cl->nom,c->nom)==0)
           {
             LR = inserer_entete(LR,tmp->cl) ;
              tmp = tmp->suivant ;
           }
         else
            tmp = tmp->suivant ;
        }
       return LR ;
    }

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par seifvai Voir le message
    desolé, rectification de la fonction rechercher nom :
    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
    tlist *r_nom(tlist *L, client *c)
    {
      tlist *tmp,*LR ;  
       tmp = L;
       while( tmp!=NULL)
        {
     
         if (strcmp(tmp->cl->nom,c->nom)==0)
           {
             LR = inserer_entete(LR,tmp->cl) ;
              tmp = tmp->suivant ;
           }
         else
            tmp = tmp->suivant ;
        }
       return LR ;
    }
    si lire les règles du forum et mettre les balises de code c'est si compliqué, j'ai peur que les listes chainées soient au-dessus de tes forces...

    Tu fais une 'insertion en tête' dans une fonction de recherche ? Bigre ? Ca sent le pâté...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    {
       tlist *tmp = L;
     
       while( tmp!=NULL)
       {
          tmp = tmp->suivant ;
       }
       ...
    pour parcourir, me parait correct. Ensuite, dans la boucle, on fait agir le critère de recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          if (strcmp(tmp->cl->nom,c->nom)==0)
          {
             break;
          }
    je te laisse fignoler les détails, mais reste simple...

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par seifvai Voir le message
    desolé ,c'etai juste pour alleger l'ecriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct
     {
       int age,type,cle;
      char nom[20],prenom[20],tel[9]; 
     }client ;  
     
    typedef struct element
    { 
      client *cl  ;     
      struct  element *suivant; 
     
    }tlist;
    Pourquoi ton "tlist" contient un pointeur vers un client ? Ce n'est pas interdit et si tu gères bien tes malloc() ça marchera mais c'est dommage. Rien ne t'empêche de définir ton "tlist" ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct element
    { 
      client cl  ;     
      struct  element *suivant;   
    }telem;
    Ensuite, ce qui est génial c'est que t'as bien séparé les choses. T'as défini un objet pour gérer un client, un objet pour gérer un élément de ta liste. T'as bien conscience qu'en séparant ainsi tes objets tu pourras mieux les manipuler. Pourquoi alors ne pas définir aussi un objet pour gérer la liste dans son intégralité ? Au début ça peut paraitre inutile mais tu verras qu'à l'usage ça aide vachement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    { 
      telem *first;
      // Eventuellement size_t nb_elem;
      // Eventuellement d'autres trucs que tu peux juger utile
    }tlist;
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Recherche dans une liste chainée
    Par reyo47 dans le forum C
    Réponses: 3
    Dernier message: 02/06/2014, 00h02
  2. Réponses: 2
    Dernier message: 05/01/2014, 01h07
  3. Recherche dans une liste Chainée
    Par alexisleprogrammeur dans le forum Débuter
    Réponses: 4
    Dernier message: 21/06/2013, 13h57
  4. Réponses: 10
    Dernier message: 08/12/2006, 02h18
  5. Réponses: 2
    Dernier message: 10/10/2005, 02h25

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