Припустимо, у вас є впорядкований набір, який ви також хочете змінити, додаючи та видаляючи елементи. Крім того, вам потрібно вміти зберігати посилання на елемент таким чином, щоб згодом ви могли отримати попередній або наступний елемент. Наприклад, список справ або набір абзаців у книзі.
Спершу слід зазначити, що якщо ви хочете зберегти посилання на об'єкти поза самим набором, ви, швидше за все, збережете вказівник у масиві, а не зберігати самі об'єкти. В іншому випадку ви не зможете вставити в масив - якщо об’єкти вбудовані в масив, вони перемістяться під час вставки і будь-які вказівники на них стануть недійсними. Те саме стосується індексів масиву.
Вашою першою проблемою, як ви вже відзначили, є вбудований список, що дозволяє вставляти в O (1), але масив, як правило, вимагає O (n). Цю проблему можна частково подолати - можна створити структуру даних, яка надає подібно до порядкового інтерфейсу доступ до масиву, де і читання, і запис є, в гіршому випадку, логарифмічними.
Ваша друга, і більш серйозна проблема полягає в тому, що заданим елементом пошуку наступного елемента є O (n). Якщо набір не був змінений, ви можете зберегти індекс елемента як посилання замість вказівника, таким чином зробивши операцію find-next операцією O (1), але так як це все, що у вас є, це вказівник на сам об’єкт і ніяк визначити його поточний індекс у масиві, відмінному від сканування всього "масиву". Це непереборна проблема для масивів - навіть якщо ви можете оптимізувати вставки, ви нічого не можете зробити для оптимізації операцій пошуку наступного типу.