Когда мы узнали о программировании. Мы узнали о хранении данных с использованием структуры данных. Одной из основных структур данных является массив (или список).

[ ]

[0,1,2,3,4,5]

Это держатель для хранения данных линейным образом. Хранить такие данные в массиве очень просто. Вам просто нужно пространство памяти для данных, и вы назначаете последовательное пространство памяти для следующих данных. Вы можете думать о данных как о человеке, а пространство памяти массива как о стуле в одном файле. Каждое кресло пронумеровано (например, 1,2,3…)

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

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

Вернемся к аналогии со стулом и человеком, теперь стул можно поставить в любом месте комнаты, каждому человеку просто нужно знать местоположение следующего человека, указывая на него (указатель). На первого человека укажет человек, мы можем назвать его Mr None. В программировании нам нужно создать дополнительное пространство для указателя, и доступ к любым случайным данным в связанном списке должен всегда начинаться от первого лица. Таким образом, реализация связанного списка немного более продвинута, чем простой список, но также позволяет лучше распределять память.

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