Problem ze zrozumieniem deklaracji skiplisty – podwójny wskaźnik

0

Cześć, mam problem ze zrozumieniem takiej deklaracji skiplisty:

struct node  { int value;  node **next;};
struct SkipList{ node *first;  node *last;  int max_level; };

Co oznacza podwójny wskaźnik na next w strukturze node? Nie rozumiem też do końca co robią nastepujące instrukcje:

SkipList *sList = new SkipList;   //rozumiem, że dynamicznie alokujemy pamięc na nową skip listę
sList->first = new node; //alokujemy węzeł i przypisujemy go pod wskaźnik first tej struktury
sList->first->value = INT_MIN; //ustawianie wartości wskazywanego węzła
sList->first->next = new node *[max_level];  // tu jest mój problem, nie rozumiem co tu się dzieje.

Bardzo proszę o pomoc ;)

1

Skoro node *nodePtr to wskaźnik na typ node, to node **nodePtrPtr jest wskaźnikiem na typ, którym jest wskaźnik na node, czyli wskaźnik na wskaźnik do node.
Wkaźnik to odnośnik do jakiegoś miejsca w pamięci. Wskaźnik może wskazywać na miejsce, gdzie znajduje się wskaźnik na coś innego.

new node *[max_level] utworzy tablicę rozmiaru max_level, której elementy są typu node *, czyli tablicę wskaźników na node. Tablica taka jest oczywiście ciągła w pamięci, a jej adres jest równoznaczny z adresem elementu number 0. To znaczy, że node **next deklaruje wskaźnik na typ *node, który akurat jest pierwszy elementem tablicy, a więc jest to także adres tablicy.

1

Z artykułu na Wikipedii:
p = new T [N];
"This requests a memory buffer from the free store that is large enough to hold a contiguous array of N objects of type T, contiguously, and calls the default constructor on each elements of the array." Czyli, przy użyciu tej składni rezerwujemy pamięć na tablicę N obiektów typu T.

0

Wspaniale, dzięki wielkie!

1

Jakbyś implementował tą skiplistę, to zamiast podwójnych wskaźników rozważ użycie vector<node*>.

1 użytkowników online, w tym zalogowanych: 0, gości: 1