Как использовать связанные списки?
имеют ли связанные списки какое-либо практическое применение вообще. Многие книги по информатике сравнивают их с массивами и говорят, что главное преимущество в том, что они изменчивы. Однако большинство языков предоставляют изменяемые версии массивов. Итак, имеют ли связанные списки какое-либо реальное применение в реальном мире, или они просто часть теории компьютерных наук?
10 ответов
связанные списки имеют множество применений. Например, реализация структур данных, которые кажутся конечному пользователю изменяемыми массивами.
Если вы используете язык программирования, который предоставляет реализации различных коллекций, многие из этих коллекций будут реализованы с помощью связанных списков. При программировании на этих языках вы не часто будете реализовывать связанный список самостоятельно, но было бы разумно понять их, чтобы вы могли понять, какие компромиссы используют библиотеки делаем. Другими словами, набор "просто часть теории компьютерных наук" содержит элементы, которые вам просто нужно знать, если вы собираетесь писать программы, которые просто работают.
они абсолютно драгоценны (в обоих популярных дважды связанных версиях и менее популярные, но проще и быстрее, когда это применимо!, односвязная версия). Например, вставка (или удаление) нового элемента в указанном "случайном" месте в "изменяемой версии массива" (например, a std::vector
в C++) составляет O(N)
здесь N
- это количество элементов в массиве, потому что все, что следует (в среднем половина из них), должно быть сдвинуто, и это O(N)
операция; в a лист, это O(1)
, т. е. постоянное время, если у вас уже есть, например, указатель на "предыдущего" элемента. Биг-О'различия, как это абсолютно огромный -- разница между реальной полезной и масштабируемой программой и игрушкой "домашнее задание"-уровень один!-)
основными приложениями связанных списков являются
- для представления полиномов Это означает в дополнение/вычитание /multipication.. двух многочленов. Например: p1=2x^2+3x+7 и p2=3x^3+5x+2 p1+p2=3x^3+2x^2+8x+9
- В Динамическом Управлении Памятью В выделении и освобождении памяти во время выполнения. *В Таблицах Символов в балансировки paranthesis
- Представление Разреженной Матрицы
Ref:- http://www.cs.ucf.edu/courses/cop3502h.02/linklist3.pdf
Да, конечно, это полезно по многим причинам.
в любое время, например, что вы хотите эффективную вставку и удаление из списка. Чтобы найти место вставки, у вас есть поиск O(N), но для вставки, если у вас уже есть правильное положение, Это O(1).
также концепции, которые вы узнаете из работы со связанными списками, помогут вам узнать, как сделать структуры данных на основе дерева и многие другие структуры данных.
неизменяемый связанный список является самым тривиальным примером постоянной структуры данных, поэтому он является стандартным (а иногда даже только) структура данных на многих функциональных языках. Lisp, Scheme, ML, Haskell, Scala, вы называете это.
таким образом, связанные списки имеют какое-либо фактическое использование в реальном мире,
использование / пример связанного списка (дважды)можно поднять в здание.
- Человек должен пройти через весь этаж, чтобы достичь вершины (хвост с точки зрения связанного списка).
- Человек никогда не может пойти на какой-то случайный этаж напрямую (должен пройти через промежуточные этажи/узлы).
- Человек никогда не может выйти за пределы верхнего этажа (рядом с хвостовым узлом присваивается null).
- Ля человек никогда не может выйти за пределы первого/последнего этажа (предыдущему головному узлу присваивается null в связанном списке).
Поднимать Имидж
основным преимуществом связанного списка в отличие от вектора является то, что время случайной вставки так же просто, как развязка пары указателей и их связывание с новым объектом (это, конечно, немного больше работы для дважды связанного списка). Вектор, с другой стороны, обычно реорганизует пространство памяти при вставках, заставляя его быть значительно медленнее. Список не так эффективен, однако, при выполнении таких вещей, как добавление в конце контейнера, из-за необходимости прогресса всех путь по списку.
связанные списки очень полезны при динамическом выделении памяти. Эти списки используются в операционных системах. вставка и удаление в связанных списках очень полезны. Сложные структуры данных, такие как дерево и графики, реализуются с использованием связанных списков.
связанные списки полезны, потому что элементы могут быть эффективно сращены и удалены посередине, как отмечали другие. Однако недостатком связанных списков является плохая локальность ссылок. Я предпочитаю не использовать списки по этой причине, если у меня нет явной необходимости в возможностях.
массивы, которые растут по мере необходимости, всегда просто иллюзия, из-за того, как работает компьютерная память. Под капотом это просто непрерывный блок памяти, который должен быть перераспределен, когда добавлено достаточно новых элементов. Аналогично, если вы удалите элементы из массива, вам придется выделить новый блок памяти, скопировать массив и освободить предыдущий блок, чтобы вернуть неиспользуемую память. Связанный список позволяет увеличивать и уменьшать список элементов без необходимости перераспределения остальная часть списка.