Question

Quelqu'un peut-il expliquer cela?

struct node 
{ 
    int data; 
    struct node * link; 
} 
main() 
{
    struct node *p, *list, *temp; 
    list = p = temp = NULL; 
    ......................... 
    ......................... 
} 

addbeg() 
{ 
    int x;
    temp=malloc(sizeof(struct node));
    scanf("%d", &x); 
    temp->data=x;
    temp->link = list;
    list=temp;
}

Il s’agit d’un code permettant de saisir des données dans une liste chaînée en langage C. Le code n'est pas complet, mais je pense que c'est suffisant pour le but. Veuillez expliquer en gros le codage de ces lignes:

 temp=malloc(sizeof(struct node));

et

 temp->link = list;
 list=temp;.
Était-ce utile?

La solution

malloc () est utilisé pour allouer de la mémoire - dans ce cas, pour un nouveau nœud.

La fonction addbeg () définie dans votre code a les effets suivants:

  1. Définit une variable temporaire x .
  2. Alloue de l'espace pour un nouveau noeud.
  3. Entre un entier (code % d dans scanf ) et le stocke dans x .
  4. Stocke la valeur qui a été enregistrée dans x dans le champ de données du noeud nouvellement attribué.
  5. Stocke l'ancien " tête " de la liste désignée par la variable liste 'en tant que lien dans le nœud nouvellement attribué.
  6. Définit le nouveau noeud comme étant la nouvelle tête de la liste stockée dans la variable ' list '.

Il s'agit d'une implémentation très basique d'une liste chaînée ( http://en.wikipedia.org/wiki / Linked_list ) d’entiers.

Autres conseils

première ligne: allouez de la mémoire à un seul nœud supplémentaire de la liste.

deuxième ligne: attache la liste actuelle en guise de continuation après cet élément.

troisième ligne: faites de l’élément actuel le début de la liste.

temp et la liste ne sont pas visibles dans addbeg, car ils sont déclarés dans main. Ils doivent soit être transmis à addbeg, soit déclarés en dehors de main (global, yuck).

malloc alloue de l'espace pour un nouveau noeud.

temp->link = list

et

list = temp

fait de ce nouveau noeud la tête de votre liste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top