Homework 3 Esercizio 1: Scrivere un programma che crei una lista di interi con valori interi letti da tastiera inserendo in coda e, successivamente all'inserimento di tutti i valori, stampi tutti gli elementi della lista e stampi il numero di chiavi distinte che compaiono nella lista. Note: Il main del programma deve

leggere da tastiera gli interi (sia positivi che negativi). La lista deve essere creata inserendo in coda. Il numero di elementi letti non e' fissato a priori. L'inserimento termina quando viene inserito un carattere non numerico. Questo si puo' ottenere sfruttando la scanf nel modo seguente: while (scanf("%d",&k)){ //inserisci l'elemento con chiave k nella lista } La chiave di un elemento della lista e' il valore intero in esso contenuto. Il programma deve dire quante chiavi diverse ci sono nella lista, quindi se una chiave compare due o piu' volte va contata solamente una volta. Il programma deve stampare prima gli elementi della lista separati da spazi, poi andare a capo e stampare il numero di chiavi distinte. Il numero di chiavi distinte deve essere calcolato sulla lista dopo il completamento dell'inserimento, soluzioni diverse saranno considerate errate. Esempio: Si inserisce la lista: 1 2 3 1 1 -4 0 9 -122 -4 -4 2 c Il programma interrompe la creazione della lista in quanto la scanf ritorna 0 a seguito della lettura del carattere "c". La lista creata e': 1 -> 2 -> 3 -> 1 -> 1 -> -4 -> 0 -> 9 -> -122 -> -4 -> -4 -> 2 Il numero di chiavi distinte e' 7 Il programma deve quindi stampare: 1 2 3 1 1 -4 0 9 -122 -4 -4 2 7 Riassumendo l'esecuzione corretta e': 1 2 3 1 1 -4 0 9 -122 -4 -4 2 c 1 2 3 1 1 -4 0 9 -122 -4 -4 2 7 Esercizio 2 Si definisce minimo relativo un elemento di una lista t.c. Gli elementi precedente e quello successivo abbiamo chiave strettamente maggiore o non esistano. Scrivere un programma che crei una lista di interi con valori interi letti da tastiera inserendo in testa e stampi i minimi relativi della lista. Note: Il main del programma deve leggere da tastiera gli interi (sia positivi che negativi). La lista deve essere creata inserendo in testa. Il numero di elementi letti non e' fissato a priori. L'inserimento termina quando viene inserito un carattere non numerico. Questo si puo' ottenere sfruttando la scanf nel modo come descritto precedentemente. Un elemento e' un minimo relativo se sia il precedente che il successivo hanno chiave strettamente maggiore. Per l'elemento in testa alla lista e quello in coda e' sufficiente verificare l'elemento successivo e precedente, rispettivamente. Il programma deve stampare le chiavi dei minimi relativi separati da spazio nell'ordine in cui compaiono scorrendo la lista dalla testa alla coda. Esempio: Si inserisce la lista: 1 2 2 5 3 10 9 a La lista creata e' 9 -> 10 -> 3 -> 5 -> 2 -> 2 -> 1 Il programma deve stampare: 9 3 1 Riassumendo, l'esecuzione corretta e': 1 2 2 5 3 10 9 a 9 3 1