Что является практическим, реальным примером связанного списка? - PullRequest
43 голосов
/ 13 марта 2009

Я понимаю определение связанного списка, но как его можно представить и связать с общей концепцией или элементом?

Например, композиция (EDIT: первоначально говорилось «наследование») в ООП может быть связана с автомобилями. Все (большинство) автомобилей в реальной жизни - одно и то же; У автомобиля есть Двигатель, вы можете запустить () его, вы можете запустить автомобиль (), остановить () и так далее. Автомобиль, как правило, имеет максимальную вместимость пассажиров, но он будет отличаться между автобусом и спортивным автомобилем, которые оба являются автомобилями.

Есть ли какой-нибудь реальный, интуитивно понятный пример простого однолинейного связанного списка, который мы имеем в наследовании? Типичный пример Linked List из учебника показывает узел с целым числом и указателем на следующий, и он просто не кажется очень полезным.

Ваш вклад приветствуется.

Ответы [ 32 ]

1 голос
/ 23 октября 2013

Лучший и простой пример двусвязного списка: Train!

enter image description here

Здесь Каждый тренер подключен к своему предыдущему и следующему тренеру (кроме первого и последнего)

С точки зрения программирования тело тренера рассматривается как узел данных (значений), а соединитель - как эталонный узел.

1 голос
/ 20 сентября 2011

хорошо, если учитель взял своих учеников в мультипликационный фильм, но она не смогла собрать места, она попросит учеников запомнить адрес (номер места) следующего ученика и так далее ... так, чтобы она не придется сталкиваться с неприятностями при возвращении !!!

1 голос
/ 05 октября 2013

Он попросил практический пример; поэтому я попробую:

Допустим, вы пишете брандмауэр; в этом брандмауэре у вас есть белый список IP-адресов и черный список IP-адресов.

Вы знаете, что ваш IP, ваш IP-адрес работы и некоторые IP-адреса тестирования должны быть в белом списке. Итак, вы добавляете все IP-адреса в белый список.

Теперь у вас также есть список известных IP-адресов, которые следует заблокировать. Итак, вы добавляете эти IP-адреса в черный список.

Зачем для этого использовать LinkedList?

  1. Операция быстрого добавления / удаления элемента из списка.
  2. Вы не знаете, сколько IP-адресов будет заблокировано / занесено в белый список. Таким образом, раскрытие одного из основных преимуществ LinkedList (его можно изменять).
0 голосов
/ 13 марта 2009

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

0 голосов
/ 24 мая 2016

Они делают это в детях дошкольного возраста все время. Когда они находятся на улице на дороге или в чем-то подобном, каждого ребенка просят держать пару других детей за руку. Каждый ребенок знает, чью руку он должен держать. Вот так они переходят дорогу. Я думаю, что это классический пример двусвязного списка.

0 голосов
/ 05 декабря 2015

Я не думаю, что есть хорошая аналогия, которая могла бы выделить две важные характеристики, а не массив: 1. эффективно вставлять после текущего элемента и 2. неэффективно находить конкретный элемент по индексу.

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

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

Ближайшая аналогия - слепой человек, который просматривает связанные предметы, такие как звенья цепи, бусы на ожерелье, железнодорожные вагоны и т. Д. Он может искать определенный предмет или ему нужно вставить предмет после текущего. Было бы неплохо добавить, что слепой может пройти их очень быстро, например, один миллион шариков в секунду, но он может чувствовать только одно звено за раз и не может видеть всю цепочку или ее часть.

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

0 голосов
/ 13 марта 2009

Посмотрите на Связанный список как структуру данных. Это механизм для представления самоагрегации в OOD. И вы можете думать о нем как об объекте реального мира (для некоторых людей это реальность)

0 голосов
/ 18 августа 2013

рассмотрим 2 или более коробок, которые имеют 2 или более отсеков. (в этом примере каждая коробка будет иметь 2 отделения) первый отсек будет содержать некоторую информацию. число или слово. второе отделение будет содержать стрелку, указывающую на следующее поле и т. д.

обратите внимание, что в каждом поле могут быть многокамерные отделения, которые содержат стрелки (указатели) и информацию (данные).

0 голосов
/ 07 мая 2012

Хорошим примером связанного списка является ваше текстовое сообщение, в котором определенный пакет сообщения может быть разделен на несколько пакетов. Каждый пакет содержит ключ, который подключается к следующему ключу и к n-му ключу для создания всего текстового сообщения, в котором он содержит ключ и данные.

0 голосов
/ 13 марта 2009

В .NET BCL класс System.Exception имеет свойство, называемое InnerException, которое указывает на другое исключение или же null. Это формирует связанный список.

В System.Type свойство BaseType точно так же указывает на другой тип.

...