Problem ze struktura

0

Witam,
Mam taki oto programik:

#include <cstdlib>
#include <iostream>

using namespace std;

struct wezel                                                                   
{
       int liczba;
       struct wezel *lewy;
       struct wezel *prawy;
};

struct wezel *new_wezel(int var)                                       
{
      struct wezel *new_wezel = new(struct wezel);
      new_wezel->liczba = var;
      new_wezel->lewy = NULL;
      new_wezel->prawy = NULL;
      return(new_wezel);
}

struct wezel *dodaj_el(struct wezel *wezel, int var)              
{
              if(wezel==NULL)
              {
                  return(new_wezel(var));                                  
              }
              else
              {
                  if(var <= wezel->liczba)                                   
                         wezel->lewy = dodaj_el(wezel->lewy, var);            
                  else
                         wezel->prawy = dodaj_el(wezel->prawy, var);            
              }
              cout << wezel;
              return(wezel);
}
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

Ogólnie chodzi o tworzenie drzewa binarnego, program nie jest mojego autorstwa. Proszę o wytłumaczenie np tej linijki:
struct wezel *new_wezel(int var)
Pierwszą strukture jako reprezentacje danych rozumiem (struct wezel), ale nie wiem co jest tworzone potem. Nie jest to funkcja a jednak coś zwraca. Dlaczego nazwą tej nowej structury/funkcji jest wskaźnik. Czemu to służy i jak tego używać. Wiem jak uzyc funkcji ale nie wiem jak tego? Proszę o w miare łopatologiczne wytłumaczenie tego. Wiem do czego służą wskaźniki ale nie wiem jaką tutaj mają funkcję. W jaki teraz sposób wypełnić to drzewo? Dzieki za pomoc

0

1 - Tak się składa, że to jest funkcja. Zwraca ona wskaźnik na struct wezel. Nazwą nie jest wskaźnik, on wchodzi w skład deklaracji zwracanego typu.

2 - Służy to temu, że tworząc struktury dynamiczne (tu BST) musisz alokować pamięć na nowe elementy. Do tych elementów masz dostęp poprzez wskaźniki, dlatego funkcje zwracają bezpośrednio wskaźniki, bo i tak musisz na nich operować.

3 - jak wypełnić drzewo ... Używając funkcji dodaj_el. Deklarujesz korzeń, a potem po prostu dodajesz nowe elementy.

{
    struct wezel * root;
    for (int i = 0; i < 100; i++)
      root = dodaj_el(root, i);
    system("PAUSE");
    return EXIT_SUCCESS;
}

No i oczywiście przydałoby się jeszcze zwolnić zaalokowaną pamięć.

0

Dzięki za wytłumaczenie problemu. Jak wyżej napisałem nie ja jestem autorem tego kodu. Jak wielu dopiero sie uczę i zaciekawiła mnie taka konstrukcja. :-)

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