Untitled

 avatar
unknown
c_cpp
2 months ago
3.2 kB
1
Indexable
/*
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