PDA

Visualizza la versione completa : [c] lista cin doppi puntatori


VicStar
11-02-2009, 15:29
Ciao atutti,
ho un problema con la lista a doppi puntatori:
il codice il seguente

struct Nodo{
int matricola;
struct Nodo* succ;
struct Nodo* prec;
}
typedef struct Nodo nodo;
typedef nodo* lista;
lista lis=NULL;

Inserrimento:

lista inserimento(lista lis, int matricola){
nuovoElemnto=(lista)malloc(sizeof(nodo));
nuovoElemnto->matricola=matricola;
buovoElemnto.next->lis;
lis=nuovoElemento;
}

La domada come aggiorno il puntatore prec?
Grazie :dh:

KrOW
11-02-2009, 16:29
Ciao. . . Potresti essere pi chiaro quando scrivi il codice ??? Ad esempio cos' quel buovoElemnto.next->lis ??? Lo dico per te cos ti possiamo aiutare

Stoicenko
11-02-2009, 16:42
magari usando i tag code o php :dh:

frznn
11-02-2009, 22:07
lista inserimento(lista lis, int matricola){
nuovoElemnto=(lista)malloc(sizeof(nodo));
nuovoElemnto->matricola=matricola;
buovoElemnto.next->lis;
lis=nuovoElemento;
}

1) manca il tipo "lista" nella dichiarazione di "nuovoElemnto"
2) buovoElemnto.next->lis suppongo debba essere nuovoElemnto->succ = lis (inserisci il nuovo nodo prima di quello puntato da lis)
3) a questo punto a rigor di logica, ci che c'era prima di lis adesso deve star prima di nuovoElemnto quindi devi aggiungere
nuovoElemnto->prec = lis->prec
4) lis = nuovoElemnto cambia il puntatore lis, ma lis locale alla funzione (in C il passaggio sempre per valore). se vuoi cambiare il puntatore lis esterno devi usare un doppio puntatore: lista * lis. naturalmente per usare lis dovrai dereferenziarlo (*lis)

Il codice dovrebbe essere questo:


lista inserimento(lista lis, int matricola){
nuovoElemnto=(lista)malloc(sizeof(nodo));
nuovoElemnto->matricola=matricola;
nuovoElemnto->succ = *lis;
nuovoElemnto->prec = (*lis)->prec;
*lis=nuovoElemento;
}

Loading