償却時間で次の操作をサポートする順序付きリストを維持するためのデータ構造はありますか?
GetElement(k):リストの番目の要素を返します。
InsertAfter(x、y):新しい要素yをリストのxの直後に挿入します。
Delete(x):リストからxを削除します。
最後の2つの操作では、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]
- Delete(c) [b、a、d]
これらの5つの更新後、GetElement(2)はdを返し、GetElement(3)はエラーを返します。