Salve,vorrei un aiuto per correggere la mia implementazione...
premetto che sono alle prime armi con c... ,cosa c'è che non va nel codice???
codice:
/* Accetta in ingresso una sequenza di interi e li memorizza in una lista.Il numero di interi che compongono la sequenza è stabilito dall'utente*/ #include <stdio.h> #include <malloc.h> //STRUTTURA DEGLI ELEMENTI DELLA LISTA,CHE SARANNO DEI NODI COLLEGATI struct nodo{ int inf; // IL TIPO NODO è UNA STRUTTURA COMPOSTA DA 2 CAMPI: UN CAMPO INFORMAZIONE(IN QUESTO CASO DI TIPO INTERO) E UN CAMPO NEXT struct nodo *next; //CHE è UN PUNTATORE ALLA STRUTTURA STESSA,IN PARTICOLARE AL PROSSIMO NODO DELLA LISTA }; struct nodo *crea_lista(); //dichiaro il metodo crea lista void visualizza_lista(struct nodo *);// e il metodo visualizza lista int main(int argc, char *argv[]) { struct nodo *testa_lista; //mi creo il primo nodo che punterà alla testa della lista testa_lista= crea_lista(); //il metodo crea lista restituisce la testa della lista(nodo),in questo modo creiamo la list visualizza_lista(testa_lista);//stampiamo la lista,il metodo richiede il puntatore al primo nodo della lista per la stampa printf("\n"); return (0); } //ADESSO REALIZZIAMO I METODI /*PARTIAMO CON IL METODO CREA LISTA CHE RESTITUISCE IL PUNTATORE ALLA TESTA DELLA LISTA, per questo avremo: struct nodo *crea_lista() DA QUI SI SPIEGA L'ASTERISCO(perchè restituisce un puntatore)*/ struct nodo *crea_lista() { struct nodo *nuovo;//mi creo il nuovo nodo struct nodo *corrente;//me ne creo un'altro di supporto int dim;//dimensione della lista int cont;//contatore per il for printf("specifica la dimensione della lista: "); scanf("%d", &dim); if(dim ==0) nuovo=NULL; else {//se la lista non è vuota creo il primo elemento nuovo =(struct nodo *)malloc(sizeof(struct nodo)); printf("\nInserisci il primo valore: "); scanf("%d", &nuovo->inf); corrente = nuovo; for(cont=2; cont<=dim; cont++) { corrente->next = (struct nodo *)malloc(sizeof(struct nodo)); //SI NOTI CHE SI TRATTA DELL'INSERIMENTO IN CODA corrente= corrente->next; printf("\nInserisci il valore del nodo: "); scanf("%d", &corrente->inf); }//chiudo il for corrente->next= NULL; }//chiudo else return(nuovo);//testa lista } //chiudo la funzione // CREIAMO IL METODO NECESSARIO PER STAMPARE LA LISTA CHE PRENDE IN INPUT LA TESTA DELLA LISTA(si noti che non c'è nessun asterisco //perchè in questo caso testituisce un void e non un puntatore come prima,invece prende in input un puntatore!!!!!) void visualizza_lista(struct nodo *testa) { while(testa!=NULL) { printf("%d", testa->inf); printf("-->"); testa= testa->next;//scorro il nodo in avanti } printf("NULL\n"); }
Grazie...