Połączonej listy można użyć, gdy chcesz tanie wstawiania i usuwania elementów i gdy nie ma znaczenia, że elementy nie są obok siebie w pamięci.
Jest to bardzo abstrakcyjne i chciałbym konkretne wyjaśnienie, dlaczego powinna być używana lista połączona, a nie tablica. Nie mam dużego doświadczenia w programowaniu, więc nie mam dużego doświadczenia (jeśli w ogóle) w świecie rzeczywistym.
data-structures
linked-list
po prawej stronie
źródło
źródło
Odpowiedzi:
Oto coś częściowo pomiędzy przykładem a analogią. Masz kilka spraw do załatwienia, więc weź kawałek papieru i napisz:
Wtedy pamiętasz, że musisz też kupić znaczki. Ze względu na położenie geograficzne twojego miasta musisz to zrobić po banku. Możesz skopiować całą listę na nową kartkę papieru:
lub możesz bazgroić na tym, który miałeś:
Myśląc o innych sprawach, możesz napisać je na dole listy, ale ze strzałkami przypominającymi sobie, w jakiej kolejności je wykonać. To jest lista połączona. Jest to szybsze i łatwiejsze niż kopiowanie całej listy za każdym razem, gdy coś dodajesz.
Potem telefon dzwoni, gdy jesteś w banku „hej, dostałem znaczki, nie odbieraj więcej”. Po prostu wykreślasz STAMPS z listy, nie przepisujesz zupełnie nowego bez STAMPS.
Teraz możesz faktycznie zaimplementować listę zleceń w kodzie (być może aplikacja, która porządkuje twoje zlecenia w oparciu o twoją geografię) i istnieje uzasadniona szansa, że faktycznie użyjesz do tego listy połączonej w kodzie. Chcesz dodawać i usuwać wiele elementów, porządkować sprawy, ale nie chcesz kopiować całej listy po każdym wstawieniu lub usunięciu.
źródło
źródło
„Stos wywołań” w języku C jest zaimplementowany jako lista połączona w binarnych interfejsach API x86 (i większości innych).
Oznacza to, że wywoływanie procedur w języku C odbywa się zgodnie z dyscypliną „pierwszy na wejściu”. Wynik wykonywania (ewentualnie rekurencyjnych) wywołań funkcji jest nazywany „stosem wywołań”, a czasem nawet „stosem”.
CALL
Instrukcji x86 kończy się implmenting połączonej listy przy użyciu „stosu wywołań”.CALL
Instrukcja wypycha zawartość% EIP rejestru, adres instrukcji po tymCALL
na pamięć stosu. Prolog nazywany fukcją wypycha zawartość rejestru% EBP, najniższego adresu zmiennych lokalnych w funkcji wywołującej, do pamięci stosu. Następnie wywoływany prolog funkcji ustawia% EBP na podstawie stosu bieżącej funkcji.Oznacza to, że% EBP jest wskaźnikiem do miejsca w pamięci, które przechowuje adres wartości% EBP funkcji wywołującej. To nic innego jak połączona lista, zaimplementowana częściowo w sprzęcie poprzez
CALL
.O ile jest to dobre, procesory x86 implementują wywołania funkcji, zwłaszcza wywołania funkcji, w których funkcja ma własną kopię argumentów i zmienne lokalne dla funkcji. Każde wywołanie funkcji przesuwa pewne informacje na „stosie wywołań”, który pozwala procesorowi wybrać miejsce, w którym zostało przerwane w funkcji wywołującej, bez ingerencji wywołanej funkcji lub funkcji wywołującej.
źródło
Połączonej listy można użyć do zaimplementowania kolejki komunikatów.
Kolejka komunikatów to struktura, w której przechowujemy informacje o zdarzeniach do późniejszego przetworzenia. Na przykład, gdy użytkownik naciska klawisz lub porusza myszą, jest to zdarzenie. Aplikacja może być zajęta w momencie wystąpienia zdarzenia, więc nie można oczekiwać, że przetworzy to zdarzenie dokładnie w momencie jego wystąpienia. Tak więc zdarzenie jest umieszczane w kolejce komunikatów (informacja o tym, który klawisz został naciśnięty lub gdzie mysz się poruszyła), a gdy aplikacja ma trochę czasu, sprawdza kolejkę komunikatów, pobiera z niej zdarzenia i przetwarza im. (Dzieje się tak w ciągu milisekund, więc nie jest to zauważalne).
Ze scenariusza użytkowania, który właśnie opisałem, powinno być oczywiste, że nigdy nie zależy nam na losowym dostępie do zdarzeń przechowywanych w kolejce komunikatów; zależy nam tylko na tym, aby móc przechowywać w nim wiadomości i je odzyskiwać. Dlatego sensowne jest użycie połączonej listy, która zapewnia optymalny czas wstawiania / usuwania.
(Nie wtrącaj się, aby wskazać, że kolejka komunikatów jest prawdopodobnie, lub bardziej prawdopodobna lub prawie tak samo prawdopodobna, zaimplementowana przy użyciu okrągłej listy tablic; jest to szczegół techniczny i ma ograniczenie: możesz tylko przechowywać ograniczona liczba wiadomości w nim).
źródło