Ciao a tutti, come da titolo posto il sorgente della gestione di una lista dinamica con le funzioni base




Codice PHP:
#include <stdio.h>#include <stdlib.h>#include <string.h>
struct sNodo{    char nome[15];    char cognome[15];    int eta;    struct sNodo *link;};typedef struct sNodo tNodo;typedef tNodo *tList;tList inserisci_elemento(tList list,char nome[],char cognome[],int eta);/*Inserisce all'interno di una lista un nodo contenente nome,cognome e eta mantenendo l'ordinamento. Restituisce il riferimento alla lista.*/tNodo *creanodo();//crea una lista vuota, ritorna un riferimento alla listavoid leggi_lista(tList list);// legge la lista e stampa a video le informazioni dei noditList cerca_elemento(tList list , char nome[] , char cognome[] , int eta);/*cerca un nodo all'interno della lista, ritorna il puntatore se esiste altrimenti ritorna NULL*/void toupper(char *s);/*trasforma le lettere da minuscole a maiuscole*/tList distruggi_lista(tList list); /*Dealloca una lista cancellando ogni elemento contenuto in essa. Restituisce il riferimento alla lista.*/int main(){    char nome[15],cognome[15];    int eta,scelta;    tList lista;    for(;;){        printf("1.)Inserisci dipendente\n2.)Leggi lista\n3.)Cerca elemento\n4.)Distruggi lista\n5.)Esci\nScelta: ");        scanf("%d",&scelta);        if(scelta==1){            printf("Inserisci nome: ");            scanf("%s",&nome);            toupper(nome);            printf("Inserisci cognome: ");            scanf("%s",&cognome);            toupper(cognome);            printf("Inserisci eta': ");            scanf("%d",&eta);            lista=inserisci_elemento(lista,nome,cognome,eta);        }else if(scelta==2){            leggi_lista(lista);        }else if(scelta==3){            tNodo *nodo;            printf("Inserisci nome: ");            scanf("%s",&nome);            toupper(nome);            printf("Inserisci cognome: ");            scanf("%s",&cognome);            toupper(cognome);            printf("Inserisci eta': ");            scanf("%d",&eta);            nodo=cerca_elemento(lista,nome,cognome,eta);            if(nodo!=NULL)printf("Nodo esistente->[%p]\n",nodo);            else printf("Il nodo non esiste\n");        }else if(scelta==4)lista=distruggi_lista(lista);        else if(scelta>=5) break;

    
}    return 0;}tNodo *creanodo(){    tNodo *newnodo;    newnodo=(tNodo *)malloc(sizeof(tNodo));    return newnodo;}tList inserisci_elemento(tList list,char nome[],char cognome[],int eta){    tList curr,prec;    tNodo *nodo;    curr=list;    while(curr!=NULL && eta>curr->eta){        prec=curr;        curr=curr->link;    }    nodo=creanodo();    strcpy(nodo->nome,nome);    strcpy(nodo->cognome,cognome);    nodo->eta=eta;    nodo->link=NULL;    if(prec==NULL){        nodo->link=list;        list=nodo;        return list;    }else{        prec->link=nodo;        nodo->link=curr;        return list;    }}void leggi_lista(tList list){    tList curr;    curr=list;    printf("************************\n");    while(curr!=NULL){        printf("Nome: %s\nCognome: %s\nEta': %d\n",curr->nome ,curr->cognome ,curr->eta);        curr=curr->link;        printf("************************\n");
    }    }
tList cerca_elemento(tList list,char nome[] , char cognome[] , int eta){    tList curr;    curr=list;    while(curr!=NULL){        if(strcmp(curr->nome,nome)==&& strcmp(curr->cognome,cognome)==&& curr->eta==eta) return curr;        curr=curr->link;    }    return NULL;}void toupper(char *s){    int i=0;    while(s[i]!='\0'){        if(s[i]>='a' && s[i]<='z')s[i]=s[i]-32;        i++;    }}tList distruggi_lista(tList list){    free(list);    list=NULL;    return list;}