PDA

Visualizza la versione completa : [c]lista bidirezionale ordinata.. problema con il passaggio di puntatori in una funzi


unit1
02-12-2011, 18:54
Salve,
Ho una lista dichiarata cosi:


typedef struct elemento {
int key;
struct elemento *puntatore;
struct elemento *prec;
} elemento;

int main(){
elemento *lista=NULL; // puntatore della lista testa
elemento *s=NULL; //puntatore all'ultimo elemento
init(lista,s); //funzione che la inizializza.. la scritta la prof ma non è il massimo
ins(lista,s,3); //funzione che non funziona!
return(0);
}


una funzione che ha scritto la prof in pseudo linguaggio e ho cambiato in C, che serve ad inizializzare la lista:


void init(elemento *p,elemento *s){//crea una lista vuota p=primo,s=ultimo
p=(elemento *)malloc(sizeof(elemento));
s=(elemento *)malloc(sizeof(elemento));
p->puntatore=s;
p->prec=NULL;
s->puntatore=NULL;
s->prec=p;
}

e una funzione che dovrebbe aggiungere un elemento alla lista che invece non funziona perchè non riesco a modificare i puntatori all'elemento precedente e quello all'elemento successivo:


void ins(elemento *testa,elemento *succ,int valore){
elemento *nuovo=(elemento*)malloc(sizeof(elemento));//crea un nuovo elemento
nuovo->key=valore;//gli da un valore
nuovo->puntatore=succ;//lo mette prima del successivo
nuovo->prec=testa; //prima gli mette la testa
//succ->prec=testa;//errore, non funziona
//testa->puntatore=nuovo;//errore, non funziona
}

Ho provato a passare i puntatori con un & nella chiamata ( ins(&lista,&s,3) ) e mettere gli * cosi ( succ->prec=testa; ) ma senza alcun successo
Qualcuno mi potrebbe dire dove sbaglio?
Grazie in anticipo :)

Loading