Suponha que você tenha um conjunto ordenado, que também deseja modificar adicionando e removendo elementos. Além disso, você precisa ter a capacidade de manter uma referência a um elemento de forma que, posteriormente, você possa obter um elemento anterior ou próximo. Por exemplo, uma lista de tarefas ou um conjunto de parágrafos em um livro.
Primeiro, devemos observar que, se você deseja manter referências a objetos fora do conjunto, provavelmente acabará armazenando ponteiros na matriz, em vez de armazenar os próprios objetos. Caso contrário, você não poderá inserir na matriz - se os objetos forem incorporados na matriz, eles serão movidos durante as inserções e quaisquer ponteiros para eles se tornarão inválidos. O mesmo vale para índices de matriz.
Seu primeiro problema, como você observou, é a lista vinculada à inserção permite a inserção em O (1), mas uma matriz geralmente requer O (n). Esse problema pode ser parcialmente superado - é possível criar uma estrutura de dados que ofereça uma interface de acesso por ordem ordinária, onde matriz e leitura e gravação são, na pior das hipóteses, logarítmicas.
Seu segundo e mais grave problema é que, dado um elemento que encontra o próximo elemento, é O (n). Se o conjunto não foi modificado, você pode manter o índice do elemento como referência, em vez do ponteiro, tornando assim find-next uma operação O (1), mas, como é tudo o que você tem, é um ponteiro para o próprio objeto e de nenhuma maneira para determinar seu índice atual na matriz que não seja a varredura de toda a "matriz". Esse é um problema insuperável para matrizes - mesmo que você possa otimizar inserções, não há nada que possa ser feito para otimizar a operação do tipo encontrar a próxima.