Salve a tutti, sto frequentando il corso di fondamenti di informatica e abbiamo da poco introdotto le liste. Da quanto ho capito ci sono due modi per implementarle, tramite array o tramite puntatori. Nel secondo caso otterremmo una lista linkata, sfruttando la memoria dinamica.

Ora avrei bisogno di un aiuto nel "decifrare" la rappresentazione in c di una generica lista. Le slide del professore non mostrano l'intero codice ma soltanto i blocchi relativi alla lista. I blocchi in questione sono questi:

codice:
typedef int E; 
struct Record; 
typedef Record *L;  

struct Record{
           
           E elem;       
           L next; };
codice:
L push(L l, E e){                    

L q;         

q =(L)malloc(sizeof(Record));          
q->elem=e;          
q->next=l;                    
return(q); 
}
codice:
L insert(L l,E e) {
L q=l, prec; int PosTrovata=0;
if (q==NULL) { 
q=push(l,e); 
return(q);
}
if (e <= q->elem) { 
q=push(l,e); 
return(q);
}

prec=q;
while ((q->next!=NULL) && (PosTrovata== 0)) {
if (e > q->next->elem) { prec=q; q= q->next; }
else PosTrovata=1;
}
prec->next=push(q->next,e);
return(l);
}
Ora avrei alcune domande:

1) Perche definisce un tipo di dato int E? E' comunque un tipo di dato intero che bisogno cè di definirlo?

2)Perche definisce un tipo Record *L? Non dovrebbe scrivere: struct Record *next?

3)Cosa rappresenta il parametro l? E la variabile q può essere considerato un puntatore temporaneo, giusto?

4)Per inserire effettivamente i dati nella lista, cosa devo scrivere all'interno del main?

Ringrazio tutti in anticipo.