Список в связанной памяти


Предположим, у вас есть упорядоченный набор, который вы также хотите изменить, добавляя и удаляя элементы. Кроме того, вам необходимо сохранить ссылку на элемент таким образом, чтобы позже вы могли получить предыдущий или следующий элемент. Например, список дел или набор абзацев в книге.

Сначала следует отметить, что если вы хотите сохранить ссылки на объекты вне самого набора, вы, скорее всего, в конечном итоге сохраните указатели список в массиве, вместо того, чтобы сами хранить объекты. В противном случае вы не сможете вставлять в массив - если объекты встроены в массив, который они будут перемещать во время вставок, и любые указатели на них станут недействительными. То же самое верно для индексов массива.

Ваша первая проблема, как вы отметили сами, - это список, связанный с вставкой, который позволяет вставлять в O (1), но для массива обычно требуется O (n). Эту проблему можно частично преодолеть - можно создать структуру данных, которая дает массивный, как по порядку список в связанной памяти интерфейс доступа, где и чтение, и запись, в худшем случае, логарифмические.

Вторая, и более серьезная проблема заключается в том, что для элемента, находящего следующий элемент, является O (n). Если набор не был изменен, вы могли бы сохранить индекс элемента как ссылку вместо указателя, тем самым сделав find-next операцию O (1), но поскольку это все, что у вас есть, это указатель на сам объект и никоим образом для определения его текущего индекса в массиве, кроме как путем сканирования всего "массива". Это непреодолимая проблема для массивов - даже если вы можете оптимизировать вставки, вы ничего не можете сделать, чтобы оптимизировать операцию поиска следующего типа.

ответ дан DenNukem 10 окт. '17 в 10:12


Источник: http://qaru.site/questions/301/array-versus-linked-list


Рекомендуем посмотреть ещё:


Закрыть ... [X]

Управление памятью с помощью связанных списков. Алгоритмы. Студопедия Рисуем машину карандашом поэтапно детям


Список в связанной памяти Управление памятью с помощью связанных списков: Другим способом
Список в связанной памяти Алгоритмы и структуры данных для начинающих: связный список
Список в связанной памяти Линейные списки В связанной памяти (в виде связного списка)
Список в связанной памяти Управление памятью с помощью связанных списков
Список в связанной памяти Связанное распределение памяти Мегаобучалка
Список в связанной памяти Linked-list - Массив против связанного списка - Qaru
Список в связанной памяти Связный список. Сортировка списков - Лекция
Список в связанной памяти Недостатки связанного списка / Хабрахабр



Похожие новости