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

  1. Qual è lo scopo della funzione `split` nella struttura nodo?
  2. 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.

  3. Come viene gestita l'inserzione di nuovi elementi nelle liste pari e dispari?
  4. 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.

  5. Quali sono i parametri e la loro direzionalità nella funzione `split`?
  6. 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.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community