traiter avec tableau de liste chaînée

Mon approche:

Un tableau de longueur fixe (disons 20), chaque élément est un pointeur sur le premier nœud d’une liste chaînée. J’ai donc 20 liste chaînée différente.

C’est la structure:

struct node{ char data[16]; struct node *next; }; 

Ma déclaration pour ce tableau

 struct node *nodesArr[20]; 

Maintenant, pour append un nouveau noeud à l’une des listes liées, je fais ceci:

 struct node *temp; temp = nodesArr[i]; // i is declared and its less than 20 addNode(temp,word); // word is declared (char *word) and has a value ("hello") 

La fonction addNode:

 void addNode(struct node *q, char *d){ if(q == NULL) q = malloc(sizeof(struct node)); else{ while(q->next != NULL) q = q->next; q->next = malloc(sizeof(struct node)); q = q->next; } q->data = d; // this must done using strncpy q->next = NULL; } 

et pour imprimer les données du tableau de la liste chaînée, je fais ceci:

 void print(){ int i; struct node *temp; for(i=0 ; i data); temp = temp->next; } } } 

Maintenant, le compilateur ne donne aucune erreur, le programme est exécuté et je lui passe les données. Lorsque j’appelle print, il n’imprime rien.

METTRE À JOUR::

après avoir édité le code (merci pour vous), je pense que le problème dans la fonction d’impression, une idée?

    Le problème réside dans addNode() . Quand la liste est vide, vous faites:

     q = malloc(sizeof(struct node)); 

    mais la scope de q est limitée à addNode() . Vous devriez avoir déclaré addNode() tant que

     void addNode(struct node **q, char *d) 

    et ajustez votre code en conséquence:

     *q = malloc(sizeof(struct node)); 

    etc…

    Lorsque vous passez la struct node *q à addNode vous lui donnez l’adresse d’un élément de votre tableau. Si vous utilisez malloc inside, vous écrasez cette variable q , qui est locale à la fonction et pointe maintenant vers quelque chose de différent, mais vous n’avez pas modifié votre tableau d’origine. Essayez d’utiliser un pointeur pour indiquer un nœud ( struct node **q ).

     void addNode(struct node *q, char *d){ if(q == NULL) q = malloc(sizeof(struct node)); 

    Voici le problème.

    La nouvelle valeur de q ne sort jamais de la fonction, votre tableau de listes chaînées n’est donc jamais mis à jour.

    Normalement, la solution consiste à utiliser un double pointeur:

     void addNode(struct node **q, char *d){ if(*q == NULL) *q = malloc(sizeof(struct node)); 

    Et appelez comme ça:

     addNode(&nodesArr[i],word); 

    Ensuite, si vous malloc un nouveau nœud, la valeur du tableau sera définie pour pointer vers le nouveau nœud.

     struct node { int actual, estimated; char c; struct node *next; } *head[4], *var[4], *trav[4]; void insert_at_end (char c, int value, int value1) { struct node *temp; temp = head[i]; var[i] = (struct node *) malloc (sizeof (struct node)); var[i]->actual = value; //var1=(struct node *)malloc(sizeof(struct node)); var[i]->estimated = value1; var[i]->c = c; //printf("%d",var->estimated); if (head[i] == NULL) { head[i] = var[i]; head[i]->next = NULL; } else { while (temp->next != NULL) { temp = temp->next; } var[i]->next = NULL; temp->next = var[i]; } }