Supposons que vous ayez un ensemble ordonné, que vous souhaitez également modifier en ajoutant et en supprimant des éléments. De plus, vous devez pouvoir conserver une référence à un élément de telle manière que vous puissiez ultérieurement obtenir un élément précédent ou suivant. Par exemple, une liste de tâches ou un ensemble de paragraphes dans un livre.
Tout d'abord, nous devons noter que si vous souhaitez conserver des références à des objets en dehors de l'ensemble lui-même, vous finirez probablement par stocker des pointeurs dans le tableau, plutôt que de stocker des objets eux-mêmes. Sinon, vous ne pourrez pas insérer dans le tableau - si des objets sont intégrés dans le tableau, ils se déplaceront pendant les insertions et tous les pointeurs vers eux deviendront invalides. Il en va de même pour les index de tableau.
Votre premier problème, comme vous l'avez remarqué vous-même, est que la liste liée par insertion permet l'insertion dans O (1), mais un tableau nécessite généralement O (n). Ce problème peut être partiellement résolu - il est possible de créer une structure de données qui donne une interface d'accès ordonnée de type tableau où la lecture et l'écriture sont, au pire, logarithmiques.
Votre deuxième problème, plus grave, est qu'étant donné un élément, trouver l'élément suivant est O (n). Si l'ensemble n'a pas été modifié, vous pouvez conserver l'index de l'élément comme référence au lieu du pointeur, ce qui fait de find-next une opération O (1), mais comme il ne vous reste qu'un pointeur vers l'objet lui-même et aucun moyen pour déterminer son index actuel dans le tableau autrement qu'en scannant l'ensemble du "tableau". Il s'agit d'un problème insurmontable pour les tableaux - même si vous pouvez optimiser les insertions, il n'y a rien que vous puissiez faire pour optimiser l'opération de type find-next.