Cytat:
Napisany przez Patrix
ok wypisywanie i szukanie sobie zrobiłem/poprawiłem - a jak wyglądałoby usuwanie elementu listy, bo to chyba bedzie wyglądać różnie w zależności czy to będzie początek listy (temp^.poprzednia = nil), środek listy (temp^.dana) czy koniec listy (temp^.nastepna = nil)
PS
Tak ale jak to zrozumiem na typie dwukierunkowym to jednokierunkowy wystarczy 'odchudzić' 
|
Nie bedzie roznicy - schodzisz, wywalasz i przepinasz. a czy przepniesz null w jakies miejsce czy cos innego to bez znaczenia.
Nie rozumiem PS, ale wydaje mi sie ze dobrze myslisz.
Zrob moze lepiej ten stos
nil <- elem6 <- elem3 <- elem8 <- elem2 <- stos
dodanie elem5 (elem5 pokazuje na elem2, stos pokazuje na elem5)
nil <- elem6 <- elem3 <- elem8 <- elem2 <- elem 5 <- stos
wypsanie - tak jak masz.
szukanie - tak jak masz.
usuwanie.
sprawdzasz czy stos nie jest nil.
sprawdzasz czy stos^.wart = co trzeba jak tak to temp1=stos^.poprz stos^.poprz = nil, stos = temp1
jak nie znalazles to teraz temp2 = stos.
i potem lecimy i sprawdzamy temp2^.poprz^.wartosc (dana to dziwna nazwa BTW). Jak znajdziemy to przepinamy jak wyzej temp1=temp2^.poprz^.poprz; temp2^.poprz^.poprz = nil; temp2^.poprz = temp1.
i tak lecisz dopoki temp2^.poprz nie bedzie nilem
Proponuje poprzerabiac na funkcje i zastanowic sie jakie wartosci powinny byc zwracane. Np. jezeli usun moze zwracac liczbe usunietych wezlow (w szczegolnosci mozesz napisac tak zeby wszystkie wystapienia usuwal, ale tak czy inaczej powinienes zzewnatrz wiedziec czy cokolwiek udalo sie wyrzucic).