Czy istnieje struktura danych umożliwiająca utrzymanie uporządkowanej listy, która obsługuje następujące operacje w zamortyzowanym czasie ?
GetElement (k) : zwraca ty element listy.
InsertAfter (x, y) : Wstaw nowy element y do listy natychmiast po x.
Usuń (x) : Usuń x z listy.
W przypadku dwóch ostatnich operacji można założyć, że x jest podane jako wskaźnik bezpośrednio w strukturze danych; InsertElement zwraca odpowiedni wskaźnik dla y. InsertAfter (NULL, y) wstawia y na początku listy.
Na przykład, zaczynając od pustej struktury danych, następujące operacje aktualizują uporządkowaną listę, jak pokazano poniżej:
- InsertAfter (NULL, a) [za]
- InsertAfter (NULL, b) [b, a]
- Wstaw po (b, c) [b, c, a]
- Wstaw po (a, d) [b, c, a, d]
- Usuń (c) [b, a, d]
Po tych pięciu aktualizacjach GetElement (2) powinien zwrócić d, a GetElement (3) powinien zwrócić błąd.