Concetti Chiave
- La struttura nodo è definita con un valore intero e un puntatore al nodo successivo, permettendo la creazione di una lista collegata.
- La funzione split divide una lista di interi in due liste separate: una per i numeri pari e una per i numeri dispari.
- L'istruzione split(l,p,d) modifica i puntatori p e d per riferirsi a liste dei numeri pari e dispari della lista l.
- La funzione insert viene utilizzata per aggiungere nuovi elementi alla lista, gestendo la creazione di nodi quando necessario.
- La direzionalità dei parametri della funzione split è tale che la lista originale è in input, mentre le liste pari e dispari sono in output.
Definizione della struttura nodo
Si assuma come data la seguente dichiarazione di tipo:
struct nodo{
int val;
nodo *next;
};
Scrivere in C++ la definizione di una funzione il cui prototipo è:
void split(nodo *lista, nodo *&pari, nodo *&dispari);
e tale che se l, p e d sono variabili di tipo puntatore a nodo allora l’istruzione
split(l,p,d); fa in modo che p e d puntino a liste di interi contenenti rispettivamente i
numeri pari e dispari contenuti nella lista l.
Esempio di utilizzo della funzione
Ad esempio, se l punta ad una lista contenente i numeri 1, 5, 6, 4, 9 allora dopo
l’esecuzione dell’istruzione split(l,p,d); la variabile p punterà ad una lista contenente i
numeri 6 e 4, mentre la variabile d punterà ad una lista contenente i numeri 1, 5 e 9.
Se ritieni opportuno utilizza (e codifica) altre funzioni.
Scrivi l’istruzione di chiamata, definisci (e se necessario, inizializza) le variabili, indica
infine la direzionalità dei parametri.
Implementazione della funzione split
void split(elem *lista, elem *&pari, elem *&dispari) //I – O - O
{
while(lista)
{
if(lista->num %2 == 0)
insert2(pari, lista->num);
else
insert2(dispari, lista->num);
lista=lista->next;
}
}
void insert(elem *&l, int el) // I/O - I
{
if(!l)
{
l=new elem;
l->num=el;
l->next=NULL;
}
else
insert(l->next, el);
}
elem * list;
elem * puntPari=NULL;
elem * puntDispari=NULL;
split(list,puntPari, puntDispari);
Domande da interrogazione
- Qual è lo scopo della funzione `split` nella struttura nodo?
- Come viene gestita l'inserzione di nuovi elementi nelle liste pari e dispari?
- Quali sono i parametri e la loro direzionalità nella funzione `split`?
La funzione `split` separa una lista di nodi in due liste distinte: una contenente i numeri pari e l'altra i numeri dispari, mantenendo l'ordine originale.
L'inserzione di nuovi elementi nelle liste pari e dispari viene gestita dalla funzione `insert`, che aggiunge un nuovo nodo alla fine della lista specificata.
La funzione `split` ha tre parametri: `lista` (input), `pari` (output) e `dispari` (output). `lista` è la lista originale da dividere, mentre `pari` e `dispari` sono le liste risultanti per i numeri pari e dispari, rispettivamente.