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.

Indice

  1. Definizione della struttura nodo
  2. Esempio di utilizzo della funzione
  3. Implementazione della funzione split

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