PDA

Visualizza la versione completa : [c]Liste dinamiche..alle prime armi


SSSS90
07-05-2014, 10:46
Salve sto da poco studiando le liste dinamiche non capisco concettualmente a che serve la seguente riga di codice:

typedef TNode *TList;


struct SInfo{

int value;
};
typedef struct SInfo Tinfo;

struct SNode{

TInfo info;
struct SNode *link;

};
typedef struct SNode TNode;
typedef TNode *TList;
int main()
{
TList lista;
return 0;


}


grz anticipatamente.;)

torn24
07-05-2014, 11:48
Ciao , pi di "cosa serve " quella riga di codice , meglio parlare di "cosa fa" , perch l'uso di typedef non indispensabile ....

Una lista , formata da nodi concatenati tra di loro da puntatori , ciascun nodo non altro che un puntatore a struct , quindi ti serve un puntatore ad struct , per creare la lista e per i nodi



typedef TNode *TList;

//Tnode rappresenta una struct , TList un tipo puntatore a struct

TList lista ; //dichiari un puntatore a struct
TNode *lista ; // dichiari un puntatore equivalente
struct SNode *lista // ancora puntatore equivalente

SSSS90
07-05-2014, 12:39
Ciao grazie per la risposta,ma il dubbio permane , non c' gi la seguente istruzione :


struct SNode *link; che fa si che link punti a una struttura successiva?

a che serve mettere
typedefTNode*TList; se ho gi creato gi un qualcosa(un puntatore)che punta a un nodo successivo?
Spero di essere stao chiaro..Grazie per la pazienza

torn24
07-05-2014, 13:35
Ciao , penso che sia meglio se riparti da capo a trattare le liste , e non ti concentri su quel codice ..

Non penso di essere capace di spiegarti in modo chiaro le liste .. ma rinnovando il consiglio , provo a fare un po di chiarezza ..

Elemento base di una lista , l' allocazione dinamica della memoria , una lista formata da nodi che sono puntatori a struct allocati dinamicamente , in questo modo non solo possibile aggiungere un nodo ad una lista , ma anche eliminarlo liberando memoria , cosa non possibile con l'allocazione statica ...

Quella struttura che dichiarata nel codice , non un nodo della lista , ma "un modello" di cosa allocare dinamicamente , e serve per sapere cosa devi allocare ..

esempio

LISTA=(struct nodo) malloc(sizeof(struct nodo ));

hai allocato dinamicamente memoria per un nodo nel puntatore lista , sapendo che la memoria
necessaria la dimensione di struct nodo

SSSS90
07-05-2014, 13:44
ok ora ho capito.So bene che questa non la sezione giusta,ma potrei chiederti se conosci qualche testo o qualche link da cui capire bene questo argomento con esercizi passo-passo..grazie ancora

Loading