Lista: Różnice pomiędzy wersjami

[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
m Dodano odnośnik do dokumentu opisującego prostą implementację listy w C.
m →‎Wskaźnikowa: xor linked list
Linia 41:
 
Powyższe cechy można prawie dowolnie łączyć, co daje możliwość stworzenia wielu różnych implementacji listy, zależnie od potrzeb.
 
====Lista dwukierunkowa z jednym wskaźnikiem====
 
Istnieje możliwość realizacji takiej listy, wtedy gdy:
# wskaźnik można utożsamiać z liczbą i wykonywać na nim działania bitowe,
# wskaźnik pusty ma wartość liczbową 0.
 
Wówczas pojedynczy wskaźnik zawiera [[xor|różnicę symetryczną (xor)]] wartości liczbowej wskaźników na poprzedni i następny element listy. Podczas przechodzenia listy pamiętany jest rzeczywisty wskaźnik uprzednio odwiedzonego elementu i dzięki własności <math>X \oplus (X \oplus Y) = Y</math> można z zakodowanej liczby odtworzyć albo poprzedni albo następny element, w zależności od kierunku przeglądania listy. Warunek 2. gwarantuje, że wskaźniki na pierwszej i ostatniej pozycji można odkodować natychmiast.
 
Zaletą takiej reprezentacji jest oszczędność pamięci (jeden wskaźnik, zamiast dwóch), wadą natomiast utrudnione przeglądanie - jeśli nie rozpoczyna się od pierwszego lub ostatniego elementu, potrzeba znać co najmniej dwa wskaźniki w celu odkodowania rzeczywistych wartości.
 
== Zobacz też ==