Untitled
/* Domanda 5 – 6 punti Scrivere un sottoprogramma che riceve come parametri le teste di due liste dinamiche concatenate di interi dette valori ed indici. Il sottoprogramma costruisce e restituisce una nuova lista ris (senza modificare le due date) riordinando gli elementi contenuti in valori come segue: • ris avrà un numero di elementi pari a quello di indici • l’elemento i-esimo di ris è ottenuto utilizzando l'elemento i-esimo nella lista indici come “indice” all'interno della lista valori per leggerne il valore (l'indicizzazione di valori parte da 0) • nel caso in cui un numero contenuto in indici sia maggiore o uguale alla lunghezza della lista valori, in ris va inserito il valore 0 Esempio 1 Date le liste in ingresso: valori -> 4 -> 5 -> 7 -> 2 indici -> 1 -> 0 -> 8 -> 3 il sottoprogramma restituirà: ris -> 5 -> 4 -> 0 -> 2 Infatti in base al contenuto di indici, verrà preso prima l'elemento in posizione 1 di valori (cioè 5), poi l'elemento in posizione 0 (cioè 4), poi l'elemento in posizione 8 (che non esiste quindi verrà inserito il valore 0), ed infine l'elemento in posizione 3 (cioè 2). Esempio 2 Date le liste in ingresso: valori -> 4 -> 5 -> 7 -> 2 indici -> 3 -> 2 -> 1 -> 0 il sottoprogramma restituirà: ris -> 2 -> 7 -> 5 -> 4 Infatti in base al contenuto di indici, verrà preso prima l'elemento in posizione 3 di valori (cioè 2), poi l'elemento in posizione 2 (cioè 7), poi l'elemento in posizione 1 (cioè 5) ed infine l'elemento in posizione 0 (cioè 4). Si considerino già disponibili e non da sviluppare la definizione di tipo struttura ed i sottoprogrammi seguenti: typedef struct nodo_{ int n; struct nodo_* next; } nodo_t; /* inserisce l'elemento n in testa alla lista l e restituisce la testa della lista modificata*/ nodo_t* inserisciTesta(nodo_t* l, int n); /* inserisce l'elemento n in coda alla lista l e restituisce la testa della lista modificata*/ nodo_t* inserisciCoda(nodo_t* l, int n); /* elimina la testa della lista l e restituisce la testa della lista modificata*/ nodo_t* eliminaTesta(nodo_t* l); /* elimina la coda della lista l e restituisce la testa della lista modificata*/ nodo_t* eliminaCoda(nodo_t* l); /* elimina l'elemento in posizione pos nella lista l, se esiste, e restituisce la testa della lista modificata*/ nodo_t* elimina(nodo_t* l, int pos); /* visualizza il contenuto della lista l */ void visualizza(nodo_t* l); */ #include <stdio.h> #include <stdlib.h> #include <string.h> nodo_t* riordina(nodo_t *valori, nodo_t *indici) { nodo_t *ris = NULL; /* 1) Scorro la lista degli indici (un ciclo) 2) Prendo il primo elemento di questa lista di indici 3) Imposto un altro ciclo (dentro al ciclo della lista degli indic), che va fino alla fine di valori 4) Dentro questo ciclo controllo indici == posizione di valore, prendo quell'elemento e faccio inserisciCoda Un caso da controllare è se il valore in indice è > della lunghezza della lista valori, allora metto 0 in ris valore = laTuaLista -> num; ris = inserisciCoda(ris, valore); */ return ris; } int main(int argc, char *argv[]) { return 0; }
Leave a Comment