Załóżmy, że masz uporządkowany zestaw, który również chcesz zmodyfikować, dodając i usuwając elementy. Ponadto potrzebujesz zdolności do zachowania odniesienia do elementu w taki sposób, aby później uzyskać poprzedni lub następny element. Na przykład lista rzeczy do zrobienia lub zestaw akapitów w książce.
Najpierw powinniśmy zauważyć, że jeśli chcesz zachować odniesienia do obiektów poza samym zestawem, prawdopodobnie skończysz przechowywanie wskaźników w tablicy, zamiast przechowywania samych obiektów. W przeciwnym razie nie będziesz mógł wstawić do tablicy - jeśli obiekty zostaną osadzone w tablicy, będą się przesuwać podczas wstawiania, a wszelkie wskaźniki do nich staną się nieprawidłowe. To samo dotyczy indeksów tablic.
Pierwszym problemem, jak sam zauważyłeś, jest lista połączona ze wstawianiem, która umożliwia wstawianie w O (1), ale tablica zazwyczaj wymaga O (n). Problem ten można częściowo rozwiązać - możliwe jest stworzenie struktury danych, która zapewnia tablicowy interfejs dostępu uporządkowanego, w którym zarówno odczyt, jak i zapis są w najgorszym przypadku logarytmiczne.
Twoim drugim, poważniejszym problemem jest to, że biorąc pod uwagę element znajdujący następny element, jest O (n). Jeśli zestaw nie został zmodyfikowany, możesz zatrzymać indeks elementu jako referencję zamiast wskaźnika, dzięki czemu find-next jest operacją O (1), ale ponieważ wszystko, co masz, to wskaźnik do samego obiektu i nie ma mowy w celu ustalenia jego bieżącego indeksu w tablicy innej niż skanowanie całej „tablicy”. Jest to problem nie do przezwyciężenia dla tablic - nawet jeśli możesz zoptymalizować wstawienia, nie możesz nic zrobić, aby zoptymalizować operację znajdowania następnego typu.