Liste 1 Usare la seguente definizione negli esercizi seguenti typedef struct El { int info; struct El *next; } ElementoListaInt; typedef ElementoListaInt* ListaDiInteri; 32) Scrivere una funzione stampaLista che ricevuta una ListaDiInteri, la stampi a video in questo modo: 1 -> 2 -> 3 -> 4 -> // Usare questa funzione per verificare le funzioni dei prossimi esercizi. 33) Definire una funzione creaLista che legga da terminale i numeri che compongono una lista ListaDiInteri e restituisca al programma chiamante un puntatore al primo elemento della lista. La lista e' di lunghezza indefinita, la lettura termina quando l'utente inserisce un numero negativo. Se l'utente inserisce come primo numero un numero negativo, la funzione dovra' restituire una lista vuota (un puntatore inizializzato a NULL). Usare questa funzione per testare le funzioni dei prossimi esercizi. 34) Definire una funzione deallocaLista che riceve una ListaDiInteri e la dealloca completamente. Usare questa funzione per la deallocazione delle liste nei prossimi esercizi. 35) Definire una funzione (fornirne due versioni, una iterativa e una ricorsiva) lunghezzaLista che data una ListaDiInteri,restituisca la sua lunghezza. 36) Definire una funzione (sia iterativa che ricorsiva) primoPari che data una ListaDiInteri, restituisca il puntatore al primo elemento pari nella lista (restituisce NULL se la lista e' vuota o non contiene elementi pari). 37) Definire una funzione (sia iterativa che ricorsiva) minimoPari che data una ListaDiInteri, restituisca il puntatore al minimo elemento pari nella lista (restituisce NULL se la lista e' vuota o non contiene elementi pari). 38) Definire una procedura (sia iterativa che ricorsiva) 'elimina' che ricevuta una ListaDiInteri e un intero X, elimini i primi X elementi e ritorni il puntatore alla testa della lista modificata. 39) Definire una funzione ordinaLista che modifica una ListaDiInteri data ordinandola in modo crescente. La funzione non deve usare allocazione dinamica della memoria (malloc e free) o accedere in scrittura al campo info. 40) Definire una procedura elementiDi che data una ListaDiInteri, restituisca una nuova ListaDiInteri ordinata e senza ripetizioni contenente tutti e soli gli elementi che compaiono nella lista data. La lista originale deve restare immutata. 41) Definire una procedura merge che date due ListaDiInteri ordinate, restituisca una nuova ListaDiInteri ordinata contenente tutti gli elementi delle due liste. Le liste originali devono restare immutate.