Rivediamo alcune delle function precedenti riscritte in maniera diversa e/o utilizzando la ricorsione.
Allegato: listeFileGenRic2
Per utilizzare il codice listeFileGenRic2 è necessario costruire un file .txt in cui vanno inserite le chiavi dei singoli nodi della lista che si vuole costruire.
1. Assegnata una lista L di interi, scrivere una funzione ricorsiva che restituisca TRUE se esiste almeno un elemento della lista che è uguale alla somma di tutti quelli che lo precedono, FALSE altrimenti.
bool sommaPrec(Pnodo p, int somma)
{
if (p->next!=NULL)
{
if (p->info==somma)
return true;
else
return sommaPrec(p->next,somma+p->info);
}
return (p->info==somma);
}
Allegato: sommaNodiliste3
Siano L1 ed L2 due liste legate, di eguale lunghezza. Scrivere una procedura o funzione ricorsiva che restituisca la lista L1 contenente in successione gli elementi di L1 ed L2, alternati fra loro.
Esempio: se L1 = (1,4,3,5) ed L2 = (7,6,2,6) ,L1 = (1,7,4,6,3,2,5,6)
Allegato: listeAlternate3
Per utilizzare il codice listeAlternate3 è necessario costruire un file .txt in cui vanno inserite le chiavi dei singoli nodi della lista che si vuole costruire.
Assegnate due liste legate L1 e L2 contenenti numeri interi, fondere le due liste in un’unica lista in cui nella prima parte ci siano solo i numeri dispari e nella seconda parte solo i numeri pari.
Allegato: spostanodi4
Dato un file di interi non ordinati metterli in una lista in ordine crescente
// MAIN
int main()
{
int item;
string nome;
Pnodo L1, p1,L2, ultimo,px;
cout<<" LISTA DI PARTENZA "<
L1=NULL;
costruisciLista(L1,nome);
cout<<"\n LISTA ORDINATA"<
stampaLista(L1); cout<<" "<
system("pause");
}
Allegato: listeInserctionSort
Per utilizzare il codice listeInsertionSort è necessario costruire un file .txt in cui vanno inerite le chiavi dei singoli nodi della lista che si vuole costruire.
Date due liste legate di caratteri L1 ed L2, contenenti eventuali ripetizioni, costruire la lista legata L3, senza ripetizioni, che contiene tutti e soli i caratteri presenti in entrambe le liste.
Allegato: listeIntersezione3
Per utilizzare il codice listeIntersezione3 è necessario costruire un file .txt in cui vanno inserite le chiavi dei singoli nodi della lista che si vuole costruire.
Date due liste legate di interi L1 ed L2, contenenti eventuali ripetizioni, costruire la lista legata L3, senza ripetizioni, che contiene tutti gli interi presenti sia in L1 che in L2. UNIONE
int item;
Pnodo L1,L2, L3,p3;
costruisciLista(L1);
stampaLista(L1);
costruisciLista(L2);
stampaLista(L2);
L3=NULL;
p3=Lista3(L1 ,L2 , L3);
if (p3==NULL) cout<<"UNIONE VUOTA"<
else
{ cout<<" UNIONE "<
stampaLista(p3);}
}
Allegato: listeUnione
Per utilizzare il codice listeUnione è necessario costruire un file .txt in cui vanno inserite le chiavi dei singoli nodi della lista che si vuole costruire.
Data una lista di interi non ordinata, renderla ordinata.
int main () {
Pnodo L=NULL;
costruisci (L);cout<<
stampa(L);cout<
if (L!=NULL) {ordinasr(L,L);
cout<<"LISTA ORDINATA "<
cout<
}
Allegato: ordinalista4
Per utilizzare il codice ordinalista4 è necessario costruire un file .txt in cui vanno inserite le chiavi dei singoli nodi della lista che si vuole costruire.