Considerate il programma riportato in coda, che contiene alcune funzioni per la manipolazione di liste di interi.
Modificate il programma scrivendo una funzione merge
con prototipo
element *merge( element*h1, element *h2 )
che costruisca una lista alternando gli elementi di l1
e l2
e restituisca l'indirizzo del primo elemento della nuova lista.
Potete assumere che l1
e l2
siano della stessa lunghezza.
Non è necessario che la funzione merge
preservi le due liste originarie l1
e l2
.
Scrivete quindi la funzione main
in modo che il programma:
merge
;Eseguendo
./soluzione
avendo nel flusso di ingresso le righe:
7 5 3 1 0
8 6 4 2 0
il programma emette sul flusso di uscita:
1 2 3 4 5 6 7 8
Si noti che l'ordine di stampa finale è invertito rispetto all'input poiché l'inserimento avviene in testa.
Eseguendo
./soluzione
avendo nel flusso di ingresso le righe:
14 2 -7 10 4 3 0
1 2 3 4 5 6 0
il programma emette sul flusso di uscita:
3 6 4 5 10 4 -7 3 2 2 14 1
#include <stdio.h>
#include <stdlib.h>
struct element {
int info;
struct element *next;
};
typedef struct element element;
element *insert(int n, element *h);
void printList(element *h);
element *merge(element*h1, element *h2);
/******** SI DEFINISCA OPPORTUNAMENTE LA FUNZIONE MAIN ********/
int main(){
....
}
/* Inserisce un nuovo elemento contenente n in testa alla lista h
Restituisce la lista ottenuta. */
element *insert(int n, element *h){
element *new = malloc(sizeof(element));
new->info = n;
new->next = h;
return new;
}
/* Stampa gli elementi della lista h */
void printList(element *h){
/* h e' usato per attraversare la lista */
for( ; h!= NULL; h=h->next)
printf("%d ", h->info);
putchar('\n');
}
/* Fonde due liste alternando gli elementi.
Restituisce l'indirizzo della lista ottenuta */
/******** SI DEFINISCA OPPORTUNAMENTE LA FUNZIONE MERGE ********/
element *merge(element*h1, element *h2){
...
}
/*****************************************************/