lista dwukierunkowa C++

zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

lista dwukierunkowa C++

Post autor: zxc18 »

mam problem z interpretacja czesci zadania ... a mianowicie, jak wstawic nowy wezel w srodek listy ? mam takie cos:

Kod: Zaznacz cały

} //nowy powinien być gdzieś w środku
wezel *buf=pierwszy->nastepny;     /*gdzie struct wezel { wezel*poprzedni, wezel*nastepny,                 
                                                        dane*wsk_dane };*/
while(strcmp(buf->wsk_dane->nazwisko,
nowy->wsk_dane->nazwisko)<0)
buf=buf->nastepny;          //jak wyjdzie z while to znalazl nastepny
nowy->nastepny=buf;
nowy->poprzedni=buf->poprzedni;
buf->poprzedni=nowy;
nowy->poprzedni->nastepny=nowy;  
i za bardzo nie wiem o co tu chodzi ...moge prosic o wyjasnienie ? dzieki i pozdrawiam
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

lista dwukierunkowa C++

Post autor: soku11 »

Najlepiej to sobie rozrysowac. Ogolnie masz kilka struktur w pamieci, ktore wskazuja jedna na druga, tak ze mozna sie poruszac po nich w gore i dol. Na poczatku ustawiasz buf na element bezposrednio po pierwszym (korzystasz z ich polaczenia pierwszy->nastepny). Dalej nastepuje porownanie zawartosci bufora (de facto samego jej pola 'nazwisko') z nowym elementem (tym co chcemy wpisac). Jesli nie znajdziemy, przechodzimy do nastepnego (buf=buf->nastepny - przechodzimy po liscie, bo bufor wskazuje na liste dwukierunkowa) elementu i znow porownujemy. Gdy strcmp zwroci =0 albo >0 (kolejnosc alfabetyczna) to nastepuje czesc wpisania tej tablicy (a konkretnie same operacje na wskaznikach). I najpierw nowy element wskazuje na buf (struktura w drzewie, ktora jest nastepna). Jako poprzedni element nowy zostaje wstawiony wskaznik na element poprzedni buf (buf->poprzedni). Teraz zostaje tylko przyporzadkowanie wskaznikow w liscie do nowego elementu. Najpierw zaczepiamy buf->poprzedni ktory ma wskazac na nowy. I jeszcze zmieniamy element przed nowym. Zmieniamy jego wskaznik nastepny na nowy. Zawile napisalem ale tego sie nie da tak tlumaczyc :) Staralem sie jak moglem :P POZDRO
zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

lista dwukierunkowa C++

Post autor: zxc18 »

hmm dobrze sie starales, dzieki za pomoc juz narysowalem to sobie, pokombinowalem i wiem o co chodzi. Pozdrawiam


edit: jeszcze pytanie co to znaczy :

utworzenie nowej danej typu STUDENT i przechowanie w tablicy wskaźników na struktury
STUDENT jej adresu, ?? jak to zrobic ?
ODPOWIEDZ