Supongamos que tiene un conjunto ordenado, que también desea modificar agregando y eliminando elementos. Además, necesita la capacidad de retener una referencia a un elemento de tal manera que luego pueda obtener un elemento anterior o siguiente. Por ejemplo, una lista de tareas o un conjunto de párrafos en un libro.
Primero, debemos tener en cuenta que si desea retener referencias a objetos fuera del conjunto, es probable que termine almacenando punteros en la matriz, en lugar de almacenar objetos en sí mismos. De lo contrario, no podrá insertar en la matriz: si los objetos están incrustados en la matriz, se moverán durante las inserciones y cualquier puntero a ellos será inválido. Lo mismo es cierto para los índices de matriz.
Su primer problema, como ha señalado usted mismo, es la inserción: la lista vinculada permite insertar en O (1), pero una matriz generalmente requeriría O (n). Este problema se puede superar parcialmente: es posible crear una estructura de datos que proporcione una interfaz de acceso ordinal en forma de matriz donde la lectura y la escritura son, en el peor de los casos, logarítmicas.
Su segundo y más grave problema es que, dado que un elemento encuentra el siguiente elemento, es O (n). Si el conjunto no se modificó, podría retener el índice del elemento como referencia en lugar del puntero, lo que hace que find-next sea una operación O (1), pero como todo lo que tiene es un puntero al objeto en sí mismo y de ninguna manera para determinar su índice actual en la matriz que no sea escaneando toda la "matriz". Este es un problema insuperable para las matrices: incluso si puede optimizar las inserciones, no hay nada que pueda hacer para optimizar la operación de encontrar el siguiente tipo.