Существует ли структура данных для ведения упорядоченного списка, которая поддерживает следующие операции за время амортизации ?
GetElement (k) : возвращает й элемент списка.
InsertAfter (x, y) : вставить новый элемент y в список сразу после x.
Удалить (x) : удалить x из списка.
Для последних двух операций вы можете предположить, что x указан как указатель непосредственно на структуру данных; InsertElement возвращает соответствующий указатель для y. InsertAfter (NULL, y) вставляет y в начало списка.
Например, начиная с пустой структуры данных, следующие операции обновляют упорядоченный список, как показано ниже:
- InsertAfter (NULL, a) [a]
- InsertAfter (NULL, b) [b, a]
- InsertAfter (b, c) [b, c, a]
- InsertAfter (a, d) [b, c, a, d]
- Удалить (c) [b, a, d]
После этих пяти обновлений GetElement (2) должен вернуть d, а GetElement (3) должен вернуть ошибку.