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
purtroppo non mi compila, consigli?
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++;
}
}