DIPARTIMENTO DI
INFORMATICA Università di Torino | |
Lezione di Mercoledi' 6/02/02 - ultimo aggiornamento: 7/02/02Ancora liste linkate.CHE COSA E' STATO FATTO A LEZIONE
Funzioni che operano su piu' di una listaAltra versione della funzione "duplist" in [NOTE1:pag. 20].
/* AI: "l" e' una liste di interi L AF: Restituisce una copia di L (ovvero una lista i cui nodi contengono gli stessi valori del campo "data" presenti in L) */ node *duplist1 (node *l) { if (l==NULL) return NULL; node *head = newnode(); node *tail = head; head->data = l->data; l = l->next; /* IC: la lista "head" contiene copia dei i nodi di L dal primo fino al nodo puntato da "l" (escluso) */ while (l!=NULL) { tail->next = newnode(); tail = tail->next; tail->data = l->data; l = l->next; } tail->next = NULL; return head; Altra versione della funzione "equallis" in [NOTE1:pag. 22].
/* AI: "l1" e "l2" sono due liste di interi L1 e L2 AF: Restituisce: - 1 se "l1" e "l2" sono uguali (elemento per elemento) - 0 altrimenti */ int equallis1 (node *l1, node *l2) { /* IC: i nodi di L1 e L2 sono uguali dai primi nodi fino ai nodi puntati da "l1" e "l2" (esclusi) */ while ((l1!=NULL) && (l2!=NULL) && (l1->data==l2->data)) { l1=l1->next; l2=l2->next; } return ((l1==NULL) && (l2==NULL)); COSA SI DEVE LEGGERE
|
node *buildmergelis (node *l1, node *l2)che date due liste ordinate L1 e L2 (possibilmente con nodi duplicati) costruisce una nuova lista ordinata che contiene le copie di tutti i nodi di L1 e L2 (NOTA: i duplicati sono inseriti nello stesso ordine in cui compaiono, e i nodi in L1 precedono quelli in L2).
L1: 1 -> 5 -> 6 -> 6' -> 8 L2: 0 -> 1' -> 3 -> 6'' - 7restituisce:
0 -> 1 -> 1' -> 3 -> 5 -> 6 -> 6' -> 6'' -> 7 -> 8e L1 e L2 sono inalterate.
node *mergelis (node **l1, node **l2)che date due liste ordinate L1 e L2 (possibilmente con nodi duplicati), PASSATE PER REFERENZA, "distrugge" L1 e L2 e restituisce (senza allocare nuovi nodi, e limitandosi a copiare i link) una lista ordinata che contiene i nodi di L1 e L2 (NOTA: i duplicati sono inseriti nello stesso ordine in cui compaiono, e i nodi in L1 precedono quelli in L2).
L1: 1 -> 5 -> 6 -> 6' -> 8 L2: 0 -> 1' -> 3 -> 6'' - 7restituisce:
0 -> 1 -> 1' -> 3 -> 5 -> 6 -> 6' -> 6'' -> 7 -> 8e dopo l'esecuzione della funzione L1 e L2 sono liste vuote.
void bubbleSort (node **l)che (senza allocare nuovi nodi, e limitandosi a copiare i link) ordina la lista che riceve come parametro (PASSATO PER REFERENZA) utilizzando la metodologia di ordinamento bubble sort (che a Programmazione I avete visto usare sugli array).
void insertionSort (node **l)che (senza allocare nuovi nodi, e limitandosi a copiare i link) ordina la lista che riceve come parametro (PASSATO PER REFERENZA) utilizzando la metodologia di ordinamento insertion sort (che a Programmazione I avete visto usare sugli array).
Last update: Feb 07, 2002 | |