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

il programma che avevo scritto è abbastanza classico

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");
    }
}
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 ?

per intenderci, intenderei trattare questi nuovi tipi di dati come elementi della struct, per essere più chiaro:

codice:
struct Prova{
         char *nome;
         char *cognome;
         int ID;
};
Precisamente mi blocco nell'inserire questi nuovi dati nella lista, cioè non so come fare e\o cosa aggiungere al codice di sopra .

Grazie per il tempo dedicatomi