Existe-t-il une structure de données pour gérer une liste ordonnée qui prend en charge les opérations suivantes en temps amorti ?
GetElement (k) : retourne le ème élément de la liste.
InsertAfter (x, y) : insérez le nouvel élément y dans la liste immédiatement après x.
Supprimer (x) : supprimez x de la liste.
Pour les deux dernières opérations, vous pouvez supposer que x est donné comme pointeur directement dans la structure de données; InsertElement renvoie le pointeur correspondant pour y. InsertAfter (NULL, y) insère y au début de la liste.
Par exemple, à partir d'une structure de données vide, les opérations suivantes mettent à jour la liste ordonnée comme indiqué ci-dessous:
- InsertAfter (NULL, a) [a]
- InsertAfter (NULL, b) [b, a]
- InsérerAprès (b, c) [b, c, a]
- InsérerAprès (a, d) [b, c, a, d]
- Supprimer (c) [b, a, d]
Après ces cinq mises à jour, GetElement (2) doit retourner d et GetElement (3) doit renvoyer une erreur.