typedef elem* lista;

definisce un alias per un puntatore a elem, quindi tutte le volte che vedi scritto lista e come se scrivessi elem*.

nella funzione crealista la riga
for (int i+1; i<=n, i++)

i č indefinito e quindi comporta risultati inaspettati. Inoltre non č definito p->inf. La funzione appare purtroppo non molto chiara nelle finalitā e con errori e non č possibile dirti quindi come sistemarla.

Tieni infene presente che nella std library esiste un tipo list giā pronto all'uso.
ciao
sergio