Lista dwukierunkowa w strukturze

2015-01-14 17:14
0

Dobry wieczór, mam kolejne niesamowicie pasjonujące i ciekawe zadanie, tym razem z list. Na razie spotkałem się z jedna trudnością: chcę stworzyć strukturę, która będzie składać się z listy ( dwukierunkowej ) i paru innych danych. Z tego co zrozumiałem, potrzebuje po prostu stworzyć strukturę, która przechowa wskaźnik do pierwszego elementu rzeczonej listy i rzeczone dane. Oto mój przykład:

typedef struct listaCyfr {
    int liczba;
    listaCyfr *next;
    listaCyfr *prev;
} ListaCyfr;

typedef struct calyCiag{
    listaCyfr *ciagLiczbowy;    
    char blabla;
        string humhum; 
} Ciag;

listaCyfr *start = NULL;
listaCyfr *end = NULL;

I teraz pytanie, jak dostać się do liczby w liście? Potrzebuje napisać funkcję która wypisze mi te liczby, a nie mam pojęcia jak. Próbowałem to zrobić, ale nic nie wychodziło. Wcale się nie zdziwię jak coś sknociłem, nie znoszę list i nie jestem w nich biegły.

P.S. Nie mogę używać kontenerów żadnych itd., a zwykłe tablice będą nieefektywne pewnie.
P.P.S. Nie wiem w ogóle czy moje założenia są prawdziwe, więc chcę się upewnić czy mogę tak zrobić.

edytowany 1x, ostatnio: Apprentice, 2015-01-14 17:15

Pozostało 580 znaków

2015-01-14 17:27
1

Bardziej bym to widział w ten sposób:

struct Node
{
    int value;
    Node* prev;
    Node* next;
};

struct List
{
    Node* head;
    char c;
    string str;
};

int main()
{
    List myList;
    ...                               // utworz wezly itd.
    cout << myList.head->value;  //odwolanie sie do wartosci w wezle
}

Pozostało 580 znaków

2015-01-14 17:30
1

Hmm, racja, to by było łatwiejsze, zaimplementuje to i dam znać.

Dobra, mam kolejny problem... Jak przesunąć wskaźnik, by pokazywał na element kolejny w tej konkretnej liście, aż dojdę do końca? Chodzi o to, że muszę ją całą wypisać. Moja funkcja by wyglądała tak, że jej argumentem by był adres głowy.

Zwykle to robiłem tak, tutaj jakoś nie mogę sobie poradzić:

void wyswietl( Node*adres )
    {
        Node *tmp;
        tmp = adres;
        while ( tmp != NULL)
            {
                cout << tmp -> value;
                tmp -> next;
            }
    }

Kompiluje się, ale wypisuje złe wartości. Ta funkcja jest zła, czy problem leży gdzie indziej?

Pozostało 580 znaków

2015-01-14 18:23
0
void wyswietl(Node *adres)
    {
        for(;adres;adres=adres->next) cout<<adres->value<<' ';
    }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-14 18:27
0

Hmm, wyszło na to samo, czyli błąd jest pewnie gdzie indziej... Dzięki za pomoc.

Pozostało 580 znaków

2015-01-14 20:10
2

@Apprentice Twój kod i kod @_13th_Dragon nie są równoważne, bo Ty nie przesuwasz się po liście.

tmp->next;

powinno być:

tmp = tmp->next;

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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