Salve a tuttie' da un po' che sto cominciando a smanettare con le liste,trovando abbastanza problemi.
il programma che avevo scritto è abbastanza classico
quello che però mi blocca è la seguente domanda, io nella struct ho utilizzato un solo tipo di dato (il char ) ma se volessi utilizzare un dato più complesso ? come ad esempio un nome e un numero ?codice:#include <stdio.h>#include <stdlib.h> struct ListaNodo{ char nodo; struct ListaNodo *nextPtr; //punta al prossimo nodo }; typedef struct ListaNodo ListaNodo; typedef ListaNodo *ListaNodoPtr; void istruzioni(void); void inserisci(ListaNodoPtr *, char); int cancella(ListaNodoPtr *, char); void visualizza(ListaNodoPtr); int main(void) { ListaNodoPtr startPtr=NULL; //primo nodo della lista, che è sempre fittizio, come l'ultimo. int scl; char item; int risp; istruzioni(); scanf("%d" ,&scl); while(scl != 4) { switch(scl) { case 1: printf("Inserisci una lettera:"); scanf("\n%c" ,&item); inserisci(&startPtr, item); break; case 2: printf("\nInserisci l'elemento da cancellare:"); scanf("\n%c" ,&item); risp=cancella(&startPtr, item); if(risp != 0) printf("\nCancellazione avvenuta con successo\n"); else printf("\nNon hai trovato nessun elemento corrispondente\n"); break; case 3: visualizza(startPtr); break; default: printf("\nScelta invalida\n"); istruzioni(); scanf("%d" ,&scl); break; } istruzioni(); scanf("%d" ,&scl); } } void istruzioni(void) { printf("1)Inserisci un nuovo nodo nella lista\n"); printf("2)Cancella un nodo dalla Lista\n"); printf("3)Visualizza\n"); printf("4)Esci\n"); } void inserisci(ListaNodoPtr *sPtr, char witem) { ListaNodoPtr nuovo_ptr; ListaNodoPtr ptr_corrente; ListaNodoPtr ptr_precedente; nuovo_ptr=malloc(sizeof(ListaNodo)); if(nuovo_ptr != NULL) //la memoria è ancora disponibile ? { nuovo_ptr->nodo= witem; nuovo_ptr->nextPtr = NULL; ptr_precedente= NULL; ptr_corrente= *sPtr; while(ptr_corrente != NULL && witem > ptr_corrente->nodo) { ptr_precedente=ptr_corrente; ptr_corrente=ptr_corrente->nextPtr; } if(ptr_precedente == NULL) { nuovo_ptr->nextPtr = *sPtr; *sPtr = nuovo_ptr; } else { ptr_precedente->nextPtr = nuovo_ptr; nuovo_ptr->nextPtr = ptr_corrente; } } } int cancella(ListaNodoPtr * sPtr, char item) { ListaNodoPtr ptr_precedente; ListaNodoPtr ptr_corrente; ListaNodoPtr tmp; if(item == (*sPtr)->nodo) { tmp= *sPtr; *sPtr = (*sPtr)->nextPtr; free(tmp); return 1; } else { ptr_precedente = *sPtr; ptr_corrente = (*sPtr)->nextPtr; while(ptr_corrente != NULL && item != ptr_corrente->nodo) { ptr_precedente=ptr_corrente; ptr_corrente=ptr_corrente->nextPtr; } if(ptr_corrente != NULL) { tmp=ptr_corrente; ptr_precedente->nextPtr=ptr_corrente->nextPtr; free(tmp); return 1; } return 0; } } void visualizza(ListaNodoPtr corrente) { if(corrente == NULL) printf("\nNessun elemento presente nella lista\n"); else { printf("La lista e':\n"); while(corrente != NULL) { printf("%c --> " ,corrente->nodo); corrente=corrente->nextPtr; } printf("NULL\n\n"); } }
per intenderci, intenderei trattare questi nuovi tipi di dati come elementi della struct, per essere più chiaro:
Precisamente mi blocco nell'inserire questi nuovi dati nella lista, cioè non so come fare e\o cosa aggiungere al codice di sopra .codice:struct Prova{ char *nome; char *cognome; int ID; };
Grazie per il tempo dedicatomi![]()

e' da un po' che sto cominciando a smanettare con le liste,trovando abbastanza problemi.
Rispondi quotando