Salve a tutti, ho cercato in giro in rete e non riesco a trovare da nessuna parte alcuna guida che riesca a soddisfare le caratteristiche del mio programma.
Quello che non riesco a trovare/fare dopo aer completato la funzione stampa è:
1. L'ordinamento della lista in ordine crescente e decrescente
2. Aggiungere elementi alla lista dopo che la lista è stata già creata
3. Eliminare elementi della lista

Questo è il programma che al momento ho scritto... Grazie in anticipo.
codice:
#include <stdio.h>#include <stdlib.h>
#include <string.h>


struct data {
    int a;
    char n[20];
    struct data *next;
};
//si crea la testa della lista


struct data *crea(){
    char risp[20];
    struct data *head, *pointer;
    head=(struct data*)malloc(sizeof(struct data));
    printf ("Inserisci il nome: ");
    scanf("%s",head->n);
    printf ("inserire l'eta': ");
    scanf ("%i", &head->a);
    pointer=head;
    while (pointer->next!=NULL){
        printf("Vuoi inserire un altro elemento?\n");
        scanf("%s", risp);
        if(strcmp(risp,"si")==0){
        pointer->next=(struct data*)malloc(sizeof(struct data));
    pointer=pointer->next;
    printf ("Inserisci il nome: ");
    scanf("%s",pointer->n);
    printf ("inserire l'eta': ");
    scanf ("%i", &pointer->a);}
        else if(strcmp(risp,"no")==0)
        pointer->next=NULL;
        else 
            printf ("Devi mettere si o no.\n");}
    return head;}
    
    //dobbiamo fare la funzione stampa
    void stampa (struct data *stampando){
    while(stampando!=NULL){
        printf("L'eta' di %s e' %i\n", stampando->n, stampando->a);
        stampando=stampando->next;
        }        
    }
    
    int main(){
        struct data *lista;
        int g=1;
        while (g<6 && g>0 ){
            printf("Cosa vuoi fare?\n1. Crea una lista\n2. Stampa la lista\n3. Termina programma ");
            scanf("%i",&g);
            switch(g){
                case 1: lista=crea();
                break;
                case 2: stampa(lista);
                break;
                case 3: return 0;
                break;
                
            }
        }
    }