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 :

Liste chainee Ajout en fin de liste


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut Liste chainee Ajout en fin de liste
    Bonjour,

    Je suis en train d'apprendre les bases des listes chainees,
    je bloque quand il s'agit d'ajouter l'element en fin de liste,
    Voici le code de ma fonction
    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
     
    t_list  *my_push_end(t_list **begin, char *data)
    {
      t_list        *new;
     
      char  *tmp;
      new = new_elem();
      new->data = data;
      new->next = NULL;
     
      if (begin == NULL)
        {
          return (NULL);
        }
      else
        {
          while (new->next != NULL)
            {
              begin = new->next;
            }
          new->next = new;
        }
    }
    j'ai cree une simple structure contenant un char *data
    Je vous en remercie,
    Cordialement,

  2. #2
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Bonjour,

    Il vous reste du travail avant d'arriver au résultat.

    Pour commencer, pourquoi avoir choisit ce prototype de fonction ?

    Que vous faut-il en entrée et en sortie ? Si vous savez définir ce dont vous avez besoins, le reste sera plus simple à écrire.

    Lilian.

  3. #3
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    Dans ton code...
    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
    t_list  *my_push_end(t_list **begin, char *data)
    {
      t_list        *new; // Il faut initialiser ton pointeur à NULL
     
      char  *tmp; // A quoi est utile tmp ?
      new = new_elem();   // Il faut tester si new est à NULL ou pas
      new->data = data;   // Si new est NULL, il ne faut pas attribuer de données
      new->next = NULL;
     
      if (begin == NULL) // Attention begin est un pointeur *begin
        {
          return (NULL);  // Tu quittes sans dessaouler new (fuite de mémoire)
        }
      else
        {
          while (new->next != NULL) // Il te faut parcourir ta liste avec begin, pas new
            {
              begin = new->next; // Si begin est déjà alloué, tu perds son adresse (fuite mémoire)
            }
          new->next = new; // A la fin de ta liste tu dois ajouter new
        }
     // Il te manque le return de ta fonction !
    }
    Je te conseil de faire un dessin de tes liste chainées, et de voir comment réaliser ta fonction.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut
    Bonjour,

    Merci de votre aide precieuse,
    Je ne comprend pas trop comment utiliser les listes chainees,
    je vais essayer de faire un meilleur code ,
    Merci de vos conseils,
    Cordialement,

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    Tu trouveras deux excellents didacticiels sur les listes chaînées simples sur ce site dont celui-ci.

    Avec mes meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut
    Bonjour,

    Merci pour ces liens,
    Je reviens vers vous apres avoir decortiquer les exemples fournis sur developpez / sdz
    cependant je ne comprend pas bien la logique des listes chainees, et comment les utiiser
    dóu la difficulte d écrire un code correcte
    Merci de bien vouloir m eclairer,
    Cordialement,

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut
    Bonjour,

    Apres quelques tests, je suis parvenus a ecrire cette fonction cependant quand je verifie les elements avec show_list() je n'est que le dernier element que j'ai placer dans la derniere fonction appeller,

    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
     
    t_list  *push_end(t_list              **liste, char *data)
    {
      t_list                *new;
     
      new = new_element();
      if (new == NULL)
        {
          exit(EXIT_FAILURE);
        }
     
      if (new->next == NULL)
        {
          new->data = data;
          new->next = NULL;
        }
      else if (*liste == NULL)
        {
          return (new);
        }
      else
        {
          t_list    *temp = *liste;
          while (temp != NULL)
            {
              temp = new->next;
            }
          new->data = data;
          new->next = NULL;
        }
      *liste = new;
    }
    Est ce quelqu'un aurais une idee ?
    Merci par avance,

  8. #8
    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
    Si tu veux insérer en queue de liste, il y a deux cas :
    1- la liste est vide (*liste == NULL), alors le nouvel élément devient la tête de la liste (*liste = new)
    2- la liste n'est pas vide, alors la tête de liste n'est pas modifiée. On cherche le dernier élément de la liste et on ajoute le nouveau derrière.

    Déroulement et critique de ton code :

    1- tu crées un nouvel élément par new_element();

    2- si la création a réussi, tu initialises les champs de l'objet créé.
    Pourquoi tester si new->next == NULL ? new->next vaut ce que la fonction new_element() y a mis. Je n'imagine pas que de temps en temps elle met NULL et de temps en temps elle met autre chose.

    3- si la liste est vide, tu retournes new mais tu laisses inchangée la tete de liste qui donc reste vide!

    4- sinon tu parcours toute la liste inutilement, au lieu de chercher le dernier élément de la liste (celui pour lequel temp->next == NULL).
    Tu n'ajoutes pas le nouvel élément en queue (qui devrait donner temp->next = new).
    Tu modifies la tête de la liste pour la placer sur le nouvel élément, on se demande pourquoi.
    Enfin tu quittes la fonction sans retourner de valeurs ce qui est contraire au prototype de la fonction.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut
    Bonjour,

    Je vous remercie pour ces explications qui m'ont permise de bien comprendre les listes simplement chainee, qui en fin de compte n'etait pas tres difficile,

    Merci a tous,
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 09/11/2011, 02h50
  2. Comment ajouter un élément en fin de liste ?
    Par Titi41 dans le forum Lisp
    Réponses: 8
    Dernier message: 20/06/2011, 03h46
  3. Les listes chainees, ajout et suppression de maillons
    Par student_ dans le forum Débuter
    Réponses: 2
    Dernier message: 11/02/2010, 20h16
  4. Ajout à la fin d'une liste chaine
    Par youssef222 dans le forum Débuter
    Réponses: 2
    Dernier message: 25/05/2008, 18h35
  5. [LG]probleme d'ajout dans une liste chainée...
    Par misteryann dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2004, 20h28

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