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

Struktury dynamiczne

Ostatnio zmodyfikowano 2011-12-15 21:09
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
» 2011-12-15 20:00:18
mój kolega ;p
P-45662
pekfos
» 2011-12-15 20:05:30
i już zrozumiał?
P-45663
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 :).
P-45664
pekfos
» 2011-12-15 20:17:11
A co w tym trudnego? Zadaj konkretne pytanie a odpowiemy..
P-45665
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
P-45666
pekfos
» 2011-12-15 20:50:59
taki prosty przykładzik. Powinien być jasny.
C/C++
#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; //wartość w pierwszym elemencie
    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/Lista
Tu masz trochę o listach.
P-45667
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:
C/C++
struct node
{
    struct node * next; //wskaźnik na następny element
    int data; //dane, oczywiście może to być cokolwiek, niekoniecznie int!
   
};

Aby przejrzeć całą listę wystarczy zrobić tak:
C/C++
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).
P-45668
1 « 2 »
Poprzednia strona Strona 2 z 2