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 :

débutant-liste chaîne de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 10
    Par défaut débutant-liste chaîne de caractères
    Bonjour, j'envoie une bouteille à la mer car apres recherche sur le forum, les tutaux et google je n'ai toujours pas compris comment creer une liste de nom.

    Je souhaiterai savoir comment récuperer un nom que l'utilisateur aura tapé (il y aura plusieurs noms à stocker) et l'inserer dans un tableau dynamique afin de constituer une liste. Faut il utiliser un tableau 2 dimensions ou une stucture avec typedef avec la fonction gets?

    Je ne peux pas inserer tous les noms dans un unique tableaux (ou la j'utiliserai la fonction strcpy) car mon but est de faire une correspondance entre la liste nom et une liste prénom, age....
    merci d'avance

  2. #2
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    c'est flou comme question ... (ça fait bien 3h que je l'ai lu, j'ai toujours pas compris)

    en prenant que la derniere partie du post, je comprend presque la question

    tu as donc quelqu'un, qui est qualifié par son nom, prenom et age ?

    le plus simple c'est de faire une structure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct somebody_s { char nom[20]; char prenom[20]; int age; } somebody;
    apres tu declare dans ton code un tableau de somebody.
    et je te laisse chercher pour l'utiliser. (hint: fgets)

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Si tu veux pouvoir encoder un nombre indéfini de personne, en utilisant la structure somebody_s donnée par Dark_Ebola, tu peux créer une liste ou une file (selon l'utilisation que tu prévois d'en avoir) qui serait du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct liste_s
    {
        somebody Data;
        struct liste_s *Suivant;
    }liste
    A chaque fois que tu voudrais rajouter une personne, il faudrait alors allouer dynamiquement un nouvel élément de type liste (avec malloc()), faire pointer le pointeur Suivant du dernier élément de la liste vers le chainon que tu viens d'allouer et remplire les données.

    La seule chose, c'est qu'une telle structure ne permet une recherche qu'en N (il faut, en gros, parcourrir toute la liste pour etre sur de trouver la pesonne que l'on recherche)...

    Mais au moins, la seule limite au niveau des personnes que tu pourra encoder sera la mémoire dont dispose ton application.

    Une solution qui pourrait accélérer la recherche serait de se baser sur un arbre binaire: chaque élément pointant vers un noeud gauche et un noeud droit sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct Noeud_s
    {
        somebody Data;
        struct Noeud_s *Gauche;
        struct Noeud_s *Droite;
    }Noeud;
    en utilisant un algorithme quelconque pour déterminer une valeur unique pour chaque personne qui puisse etre comparée sous la forme de plus grand ou plus petit...

    Tu n'aurais alors qu'à décider que le pointeur Gauche pointe vers un élément plus petit, et le pointeur Droite vers un élément plus grand (par rapport au noeud sur lequel tu te trouve)...

    Correctement rempli, un tel arbre permet une recherche en log(N)-1 et permet de trouver un élément parmis 255 en 8 itérations seulement... une recherche sur 65.300 et quelques éléments ne s'effectuant qu'en 16

    Les deux plus grosses difficultés d'un tel arbre resposent dans les fait de
    1. Etre sur que chaque donnée aie une valeur de comparaison exclusivement unique
    2. arriver à remplir l'arbre de manière complete (les deux pointeurs devant à chaque fois etre utilisés)


    Pour la deuxieme, une recherche sur google avec les termes "tri arbre binaire algorithme" devrait te permettre de trouver assez facilement l'algorithme à mettre en oeuvre
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    koala01 : deja qu'il s'en sors pas dans les specs de son projet. qu'il nous parle de gets ...
    je pense que lui donner ces informations vont pas l'aider; au contraire.
    attaquer d'emblée sur un arbre binaire equilibré ... attendons qu'il soit a l'aise avec les structs et la manipulation de chaines saisi par un singe.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Dark_Ebola
    koala01 : deja qu'il s'en sors pas dans les specs de son projet. qu'il nous parle de gets ...
    je pense que lui donner ces informations vont pas l'aider; au contraire.
    attaquer d'emblée sur un arbre binaire equilibré ... attendons qu'il soit a l'aise avec les structs et la manipulation de chaines saisi par un singe.
    Oupppssss... Autant pour moi

    C'est vrai que j'aurais du m'arreter apres les explications de base d'une liste simplement chainée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Moi, j'aurais pris de base une liste doublement chaînée, car:
    1. Il faut prendre les bons réflexes tout de suite, une liste doublement chaînée permet un contrôle d'erreur.
    2. Je trouve qu'une liste doublement-chaînée est plus facile à manipuler pour les insertions/suppressions.
    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.

  7. #7
    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 Dark_Ebola
    <...>attendons qu'il soit a l'aise avec les structs et la manipulation de chaines saisi par un singe.
    +1

Discussions similaires

  1. [Débutant] Inverser une chaîne de caractères
    Par zbooon dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 28/04/2017, 13h44
  2. Trier une liste chaînée de caractères
    Par Electro_Man dans le forum C
    Réponses: 6
    Dernier message: 27/04/2014, 18h01
  3. Réponses: 15
    Dernier message: 26/04/2010, 10h21
  4. Listes chaînées de caractères
    Par monrow dans le forum Ada
    Réponses: 2
    Dernier message: 31/12/2009, 13h30
  5. Réponses: 7
    Dernier message: 10/10/2007, 11h29

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