Untitled

 avatar
unknown
c_cpp
a month ago
1.7 kB
3
Indexable
/*
Scrivere un sottoprogramma che riceve in ingresso la testa di una lista dinamica per la gestione di numeri interi. Il
sottoprogramma costruisce e restituisce una nuova lista di interi, in cui ciascun elemento i-esimo è la media tra l’i-
esimo elemento a partire dalla testa e l’i-esimo elemento a partire dalla coda della lista di partenza. Per esempio se la
lista in ingresso è:
1 ® 5 ® 4 ® 7 ® 6 ® 3 ® 6
Il sottoprogramma restituirà la lista:
3 ® 4 ® 5 ® 7
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;
nodo_t* inserisciTesta(nodo_t* l, int n);
nodo_t* inserisciCoda(nodo_t* l, int n);
nodo_t* eliminaTesta(nodo_t* l);
nodo_t* eliminaCoda(nodo_t* l);
nodo_t* elimina(nodo_t* l, int pos);
void visualizza(nodo_t* l);

1 -> 5 -> 4 -> 7 -> 6 -> 3 -> 6

Media : (1+6)/2   (5+3)/2   (4+6)/2 (7+7)/2
        3 -> 4 -> 5 -> 7
*/

#include <stdio.h>

nodo_t *mediaLista(nodo_t *l1)
{
    nodo_t *nuovaLista = NULL;
    nodo_t *cur = l1;
    int lunghezza = 0;

    while(cur != NULL)
    {
        lunghezza++;
        cur = cur -> next;
    }

    if(lunghezza == 0)
    {
        return NULL;
    }

  
    for(int i=0; i<(lunghezza+1)/2; i++)
    {
        cur = l1;
        for(int j=0; j< i; j++)
        {
            cur = cur -> next;
        }

        int elementoTesta = cur -> num;


        cur = l1;
        for(int j=0; j<lunghezza-1-i; j++)
        {
            cur = cur->next;
        }
        int elementoCoda = cur -> num;


        media = (elementoTesta + elementoCoda) / 2;
        nuovaLista = inserisciCoda(nuovaLista, media);

    }

    return nuovaLista;
}

Leave a Comment