Lista dwukierunkowa w strukturze

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ć.

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
}
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?

0
void wyswietl(Node *adres)
    {
        for(;adres;adres=adres->next) cout<<adres->value<<' ';
    }
0

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

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;

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