Struktury dynamiczne
Ostatnio zmodyfikowano 2011-12-15 21:09
diego997 Temat założony przez niniejszego użytkownika |
» 2011-12-15 20:00:18 mój kolega ;p |
|
pekfos |
» 2011-12-15 20:05:30 i już zrozumiał? |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2011-12-15 20:07:12 Niestety, ale czyta teraz na internecie że jest to trudny temat więc się nie zniechęca :D Jutro się zapyta pana Profesora :). |
|
pekfos |
» 2011-12-15 20:17:11 A co w tym trudnego? Zadaj konkretne pytanie a odpowiemy.. |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2011-12-15 20:41:12 No to w takim razie czy mógłbyś mi napisać program najprościej jak się da który przechowuje na liście liczby podane przez użytkownika a następnie je wyświetla ?
P.S ja w ogóle nie rozumie działania tej listy jak mam np tablice dajmy na to int tab[5] to wiem że gdzieś w pamięci rezerwowane jest miejsce dla 4x5 bajatów i to nie byle gdzie tylko po kolei dlatego mamy do nich dostęp w tak ładny sposób :D |
|
pekfos |
» 2011-12-15 20:50:59 taki prosty przykładzik. Powinien być jasny. #include <iostream>
struct node { node * next; int val; node() : next( nullptr ) { } void add( int v ) { if( !next ) { next = new node; next->val = v; } else next->add( v ); } };
int main() { node * root = new node; root->val = 1024; root->add( 1 ); root->add( 3 ); root->add( 42 ); root->add( 64 ); for( node * a = root; a; a = a->next ) std::cout << a->val << std::endl; }
Lista tak ma działać by połączyć elementy nie sąsiadujące z sobą. Wstawianie elementów w środek listy nie wymaga realokacji tylko zmiany wartości 1 wskaźnika i dodanie nowego elementu. http://pl.wikipedia.org/wiki/ListaTu masz trochę o listach. |
|
npHard |
» 2011-12-15 21:09:06 P.S ja w ogóle nie rozumie działania tej listy jak mam np tablice dajmy na to int tab[5] to wiem że gdzieś w pamięci rezerwowane jest miejsce dla 4x5 bajatów i to nie byle gdzie tylko po kolei dlatego mamy do nich dostęp w tak ładny sposób :D |
Właśnie dlatego tablice bywają niewygodne. Co jeśli chcesz dodać jakiś element? Co gorsza, co jeśli chcesz go dodać do środka? No, i w takim momencie z pomocą przychodzi lista. W liście, w przeciwieństwie do tablicy elementy nie są przechowywane w jednym miejscu w pamięci, tylko są porozrzucane. Listy najprościej można podzielić na jednokierunkowe i dwukierunkowe oraz na cykliczne i niecykliczne. Najprostsze są te jednokierunkowe. W takim przypadku każdy element listy zawiera wskaźnik na kolejny element lub NULL jeśli jest to ostatni element listy. Mając pierwszy element listy(zwany często głową) możemy przeiterować po całej liście. Struktura takiej listy wygląda tak:
struct node { struct node * next; int data; };
Aby przejrzeć całą listę wystarczy zrobić tak:
struct node * ptr = head; while( ptr != NULL ) { printf( "%d\n", ptr->data ) ptr = ptr->next; }
Zakładam, że w head znajduje się pierwszy element listy.
W liście dwukierunkowej oprócz wskaźnika do następnego elementu istnieje również wskaźnik na poprzedni(lub NULL, jeśli jest to pierwszy element). W liście cyklicznej ostatni element wskazuje na pierwszy(nie ma NULL'a). |
|
1 « 2 » |