PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Listen in C



DELAC
06-01-2011, 14:19
Hi!

Hätte hier ne Frage zur Listenimplementierung:

Was genau stellen denn die beiden Pointer *nodeptr und *listptr dar? Ich verstehe die Stuct definition bis:
typedef struct node{}Node.


Hier die Funktionen:


typedef struct node {T* data; struct node *next;} Node, *nodeptr;

typedef struct list {nodeptr first, last;} List, *listptr;

List L;
void Init(listptr L)
{ L->first = NULL; L->last = NULL;}


nodeptr newnode(T* item)
{ nodeptr np;
np=(nodeptr) malloc(sizeof)(Node));
np->data = item;
np->next = NULL;
return np;
}

zenobic
06-01-2011, 19:38
Hallo,



Was genau stellen denn die beiden Pointer *nodeptr und *listptr dar?


nodeptr ist ein pointer auf Node (struct node),
nicht global hätte man diesen Pointer auch so erzeugen können:


// in main
Node *another_nodeptr = malloc(sizeof(Node));



Ein globaler pointer auf eine Node wird oft verwendet um Anfang und Ende der Listen
zu referenzieren (also nur ein Zeiger auf die Adresse).



typedef struct list {nodeptr first, last;} List, *listptr;

In der Typdefinition der Liste werden nur die Refernzen auf first und last node gespeichert.

Ähnl. ist es in diesem Beispiel, nur eben andere Schreibweise:
http://openbook.galileocomputing.de/c_von_a_bis_z/021_c_dyn_datenstrukturen_002.htm#mj0230cca6aa7fb8 7181f7f69e396d6fd8

Der Vorteil in deinem Code ist aber, dass die struct als Typ mit typedef erzeugt wurde und man dadurch auf struct bei Verwendung verzichten kann.