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 :

Les listes chainees, ajout et suppression de maillons


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut Les listes chainees, ajout et suppression de maillons
    Bonsoir, j'ai realise un petit code de rappel avec les listes chainnees, et il y a un detail que je ne comprends pas (voir les commentaires sur le 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
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    void            aff_list(t_data *list)
    {
      while (list != NULL)
        {
          my_putchar((list->c));
          list = list->next;
        }
    }
     
    void            delete_data(t_data **list)
    {
      t_data        *epur;
     
      while (*list != NULL)
        {
          epur = *list;
          *list = (*list)->next;
          free(epur);
        }
    }
     
    void            readd_data(t_data *list)
    {
      t_data        *readd;
     
      readd = malloc(sizeof(*readd));
      readd->c = 'Z';
      readd->next = NULL;
      if (list == NULL)
        list = readd;
      else
        list->next = readd;
    }
     
    void            add_data(t_data *list)
    {
     
     t_data        *add;
     
      add = malloc(sizeof(*add));
      add->c = 'A';
      add->next = NULL;
      if (list == NULL)
        list = add;
      else
        list->next = add;
    }
     
    int             main(int ac, char **av)
    {
      t_data        *list;
     
      list = NULL;
      list = malloc(sizeof(*list));  /*pourquoi cette ligne n'est pas utile ? Le malloc se fait grace a t_data *add ?*/
      add_data(list); /*Pourquoi si je n'envoie pas l'adresse (&list) ca ne fonctionnera pas (le 'A' ne s'ajoute pas), alors que je fais exactement la mm chose en dessous et ca fontionne (le 'Z' s'ajoute)*/
      readd_data(list);
      aff_list(list);
      delete_data(&list);
      aff_list(list);
      return (0);
    }
    Merci bien ! Bonne soiree

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      list = malloc(sizeof(*list));  /*pourquoi cette ligne n'est pas utile ? Le malloc se fait grace a t_data *add ?*/
      add_data(list); /*Pourquoi si je n'envoie pas l'adresse (&list) ca ne fonctionnera pas (le 'A' ne s'ajoute pas), alors que je fais exactement la mm chose en dessous et ca fontionne (le 'Z' s'ajoute)*/
    D'abord le deuxième point :
    add_data() doit pouvoir modifier list lorsque la liste est vide (list == NULL). Comme les paramètres d'une fonction sont des copies des arguments, lorsque tu écris dans add_data()
    c'est la copie qui est modifiée, pas l'original. Tu dois donc passer l'adresse de façon que la fonction sache où se trouve la variable et puisse ainsi la modifier.

    Le premier point :
    il n'y a pas de raison de mettre quelque chose dans list (à part list = NULL qui exprime que la liste est vide ce qui est nécessaire à la fonction add_data()). C'est la fonction add_data() qui remplit la liste et list qui conserve l'adresse de départ de la liste.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut
    Ok, merci pour les explications !

    Bonne soiree.

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

Discussions similaires

  1. Liste chainee Ajout en fin de liste
    Par kimikimi dans le forum C
    Réponses: 8
    Dernier message: 02/05/2011, 13h55
  2. probleme sur les listes chainees
    Par guipe dans le forum Débuter
    Réponses: 19
    Dernier message: 21/04/2010, 15h49
  3. Réponses: 6
    Dernier message: 16/02/2008, 21h53
  4. les Listes chainees
    Par uknico dans le forum C
    Réponses: 6
    Dernier message: 28/05/2007, 20h54
  5. problème de pointeur avec les listes chainees
    Par innosang dans le forum C
    Réponses: 9
    Dernier message: 30/12/2005, 15h46

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