Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Struktura i odwoływanie się do niej z jej wnętrza

Ostatnio zmodyfikowano 2014-12-05 00:13
Autor Wiadomość
wilkoo13
Temat założony przez niniejszego użytkownika
Struktura i odwoływanie się do niej z jej wnętrza
» 2014-12-04 17:36:38
Może mi ktoś wytłumaczyć ten kod linijka po linijce? Czy użycie typedef jest tutaj konieczne?
SelfReferential* sr; - co to jest????????
Czemu tego wyżej nie można zapisać int*? Czy tu nie chodzi o wskaźnik?
C/C++
//: C03:SelfReferential.cpp
// Allowing a struct to refer to itself

typedef struct SelfReferential {
    int i;
    SelfReferential * sr; // Head spinning yet?
} SelfReferential;

int main() {
    SelfReferential sr1, sr2;
    sr1.sr = & sr2;
    sr2.sr = & sr1;
    sr1.i = 47;
    sr2.i = 1024;
} ///:~
P-122194
Kaikso
» 2014-12-04 21:39:36
SelfReferential to lista jednokierunkowa, a w main utworzyłeś listę cykliczną. Działa to tak że kolejka jednokierunkowa to struktura zawierająca jakieś dane (u ciebie jest to int i) i odwołanie do następnej struktury tego typu. W main jest to lista cykliczna bo w ostatni element nie kończy listy tz. wskaźnik do następnej struktury jest pusty (ma wartość NULL), ale ma wartość pierwszego elementu.

Dzięki temu możesz np. zrobić tak:
C/C++
#include <malloc.h>

#define NTAB 16 //ilość elementów w liscie

typedef struct SelfReferential {
    int i;
    SelfReferential * sr;
} SelfReferential;

int main() {
    SelfReferential sr; //pierwszy element statyczny
    SelfReferential * tmp = & sr; //do obsługi kolejki
    int i;
    for( i = 1; i < NTAB; i++ ) //15 kolejnych to elementy dynamiczne
    {
        tmp->sr = malloc( sizeof( SelfReferential ) ); //nowy element dynamiczny
        tmp = tmp->sr; //zmiana wskaźnika w liście na aktualny koniec listy
    }
    tmp->sr = & sr; //na końcu listy wpisujemy odwołanie do pierwszego
   
    tmp = & sr; //wracamy na początek (pierwszy statyczny element)
    for( i = 0; i < NTAB; i++ )
    {
        /*
        * jakieś działania na tmp->i
        */
       
        tmp = tmp->str //następny element (jeśli koniec automatycznie będzie ustawiony pierwszy element)
    }
   
    tmp = tmp->sr; //pomijamy element statyczny (nie dealokujemy)
    for( i = 1; i < NTAB; i++ ) //15 kolejnych elementów to elementy dynamiczne
    {
        SelfReferential * next = tmp->sr; //kopiujemy wskaźnik do następnego (po dealokacji stracimy go)
        free( tmp ); //dealokujemy elementy dynamiczne
        tmp = next; //następny element
    }
   
    return 0;
}
P-122219
wilkoo13
Temat założony przez niniejszego użytkownika
» 2014-12-04 23:28:00
Jak byś mógł mi wyjaśnić co to jest kolejka. Dopiero zaczynam struktury i narazie nie wiem o nich nic.

Co oznacza * przy nazwie struktury.?
Co oznacza nazwa struktury w swoim ciele jak przestawiłem wyżej?
Co oznacza & przy nazwie struktury?
Co to jest kolejka oraz co oznacza odwoływanie się do struktur?
Struktura to struct struktura{...} czy struktura s1.
P-122236
Kaikso
» 2014-12-05 00:13:22
Co oznacza * przy nazwie struktury.?
Przy typie oznacza on typ wskaźnika.
» Kurs C++Wskaźniki lekcja

Co oznacza nazwa struktury w swoim ciele jak przestawiłem wyżej
Ta nazwa nie ma znaczenia, możesz ją zmienić na inną.

Co oznacza & przy nazwie struktury?
Jest to operator pobrania adresu.
» Kurs C++Wskaźniki lekcja

Co to jest kolejka oraz co oznacza odwoływanie się do struktur?
Przepraszam pomyliłem się nie kolejka lecz lista.
Tu masz opis co to jest:
http://pl.wikipedia.org/wiki​/Lista

Struktura to struct struktura{...} czy struktura s1.
struct struktura{...}, a s1 to zmienna.
» Kurs C++Struktury danych lekcja
P-122241
« 1 »
  Strona 1 z 1