funzione raddoppia valori lista in un'altra lista

Pubblicità

Puziode

Utente Attivo
Messaggi
615
Reazioni
402
Punteggio
65
Buongiorno, ho un esercizio da risolvere che mi chiede (in linguaggio c) di scrivere una funzione che, data una lista collegata con puntatori, mi restituisce una nuova lista con i valori raddoppiati.
Vi posto quello che ho scritto io
C:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>


/* DEFINIZIONE STRUTTURA DELLA LISTA */
struct list{
    float value;
    struct list *next_ptr;
};
void nuova_lista(struct list **ptrptr, int size);
void init(struct list **ptrptr);
void suf_insert(struct list **ptrptr, float value);
void pre_insert(struct list **ptrptr, float value);
void copia_lista(struct list *src_ptr, struct list ** dest_ptrptr);
void visit(struct list *ptr);

int main(){

    struct list **ptrptr=NULL;
    struct list **dest_ptrptr=NULL;
    struct list *src_ptr;
    int size;
    int a=1;
    printf("Inserisci la dimensione della lista\n");
    scanf("%d", &size);
    
    nuova_lista(ptrptr, size);
    visit(*ptrptr);
    copia_lista(dest_ptrptr, size);
    visit(*ptrptr);

    return 0;   
}


void nuova_lista(struct list **ptrptr, int size){
    init(ptrptr);
    int a=1;
    int count;
    for(count=0; count<size; count++){
        float value;
        printf("Inserisci l'elemento di posto %d\n", count+1);
        scanf("%f", &value);
        suf_insert(ptrptr, value);
    }
}

void init(struct list **ptrptr){
    *ptrptr = NULL;
}

void suf_insert(struct list **ptrptr, float value){
    while(*ptrptr!=NULL)
        ptrptr = &((*ptrptr)->next_ptr);
    pre_insert(ptrptr, value);
}

void pre_insert(struct list **ptrptr, float value){
    int a;
    struct list *tmp_ptr;
    tmp_ptr = *ptrptr;
    *ptrptr = (struct list*)malloc(sizeof(struct list));
    (*ptrptr)->value = value*a;
    (*ptrptr)->next_ptr = tmp_ptr;
}

void copia_lista(struct list * src_ptr, struct list ** dest_ptrptr){
        int a=2;
        init(dest_ptrptr);
        while(src_ptr!=NULL){
            suf_insert(dest_ptrptr,src_ptr->value);
            src_ptr=src_ptr->next_ptr;
        }
    }

void visit(struct list *ptr){
    int count = 1;
    while (ptr!=NULL){
        printf("%d) %f\n", count, ptr->value);
        ptr=ptr->next_ptr;
        count++;
    }
}
purtroppo non mi compila, consigli?
 
Il compilatore dovrebbe dirti che errore c'è, hai dichiarato copia_lista come un (list *, list**) e gli passi un (list**, int).
Comunque secondo me ti stai complicando la vita, basta un metodo con la lista in input e li dentro crei la nuova lista con i value*2.
 
Pubblicità
Pubblicità
Indietro
Top