Liste c

Omega1
Salve a tutti!
Ho un problema con la costruzione di una lista in c.
Il problema è che non riesco a collegare gli elementi.
Non chiedo che mi completiate il programma, ma solo qualche aiuto!
Ecco qua il codice scritto:
#include <stdio.h>
#include <stdlib.h>

typedef struct dati
{
     int codice;
     struct dati *succ;
}dati;

void InsTesta(int num, dati *p)
{
    dati *id;
    id=NULL;
    id=(struct dati *) malloc(sizeof(struct dati));
    id->codice=num;
    id->succ=p;
    p=id; //Nuovo inizio della lista.
    printf("Allocato\n\n");  
}

void stampa(struct dati *p)
{
    int i=0;
    while (p!=NULL)
    {
         printf(" %d\n", p->codice);
         i++;
         p=p->succ;
    }
    printf("\nStampato/i %d elemento/i\n", i);
}

int main(int argc, char *argv[])
{
 
  dati *lista;
  lista=NULL;
  int g=45;
  InsTesta(g, lista);
  InsTesta(12, lista);
  stampa(lista);
  system("PAUSE");	
  return 0;
}


Grazie! :D

Risposte
apatriarca
void InsTesta(int num, dati *p) 
{ 
    dati *id; 
    id=NULL; 
    id=(struct dati *) malloc(sizeof(struct dati)); 
    id->codice=num; 
    id->succ=p; 
    p=id; //Nuovo inizio della lista. 
    printf("Allocato\n\n");  
}

In questo codice non stai modificando la lista ma solo il parametro locale p. Per poter modificare il puntatore che hai passato devi usare un puntatore a puntatore come nel codice che segue:
void InsTesta(int num, dati **p) 
{ 
    dati *id; 
    id = malloc(sizeof(dati));
 
    id->codice = num; 
    id->succ = *p; 

    *p = id; //Nuovo inizio della lista.

    printf("Allocato\n\n");  
}

In questo modo dovrebbe funzionare.

Omega1
:smt041 Grazie mille! Ora funziona perfettamente!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.