Не тратьте время зря. Делайте правильные вещи в нужный момент.
Я всегда говорю это другим. Так что не теряйте времени зря, просто переходите к основной теме.
Что такое связанный список?
Проще говоря, связанный список — это линейная структура данных, которая содержит несколько узлов (контейнеров), и каждый узел содержит данные и указатель (указатели) на следующий или предыдущий узел.
Хорошо, давайте поиграем в коробочки. В каждой коробке несколько долларов. Первый содержит 5 долларов, а другие также содержат деньги в порядке возрастания. Я даю вам первую коробку с 5 долларами и случайным образом прячу другие коробки в спальне и на кухне. Если вы можете найти другие коробки по очереди, вы можете выиграть общую сумму денег во всех коробках. Но условие в том, что вы не можете открыть и увидеть деньги, пока не найдете последнюю коробку.
К счастью, сегодня твой день рождения, поэтому я также хочу, чтобы ты выиграл деньги. Вот почему я кладу на каждую коробку подсказку о том, где вы можете найти следующую коробку. Вы берете коробку и обнаруживаете, что в ней есть два отделения с подсказкой и призом. Вы открываете отделение для подсказок и находите записку. В нем есть буква «К». Вы умны, поэтому можете легко догадаться, что следующая коробка находится на кухне. Затем вы найдете вторую коробку. Также есть записка и она содержит букву «Б». Вы также найдете эту коробку с запиской. Но эта нота содержит ноль «0». Ты супер умный, поэтому ты можешь сказать мне, что это последняя коробка, и ты выиграешь все деньги.
На самом деле так работает связанный список. Связный список представляет собой контейнер из двух элементов. Один — это данные, такие как деньги внутри коробки, а другой — указатель на следующий контейнер, например ключ к следующему ящику. Вам всегда будет предоставлен первый контейнер списка, который является головным. И вы можете легко перейти к последнему контейнеру. Как вы можете догадаться, что это последний контейнер. Потому что он имеет указатель на None как ничто. И это односвязный список. В двусвязном списке все контейнеры содержат два указателя. Один указатель указывает на следующий контейнер, а другой указатель указывает на предыдущий контейнер. В циклическом связанном списке нет указателя None. Последний указатель снова указывает на первый контейнер.
Таким образом, в контейнере связанного списка (или мы можем назвать его node) необходимы две вещи. данные и указатель на следующий узел (контейнер).
Пришло время внедрить нашу игру «Ящики» в связанный список. Создайте файл с именем linked_list_box_example.py и напишите приведенный ниже код.
Итак, это наш класс узла (создатель контейнера/коробки). Мы будем создавать экземпляры узлов по мере необходимости. Давайте создадим три экземпляра узла. Обновите файл linked_list_box_example.py, как указано ниже.
Давайте рассмотрим некоторые основные атрибуты и функциональные возможности односвязного списка.
Основные атрибуты связанного списка
Узлы:
- данные, значение — (удерживать данные/значение)
- next, next_node — (указатель на следующий узел)
Связанный список:
- head — (головной/первый узел. Он нам нужен всегда)
- хвост — (последний узел списка. иногда он нам не нужен)
Основные функции связанного списка:
- insert, push, append (insert — данные в определенную точку связанного списка, push — вставка данных в начало, append — вставка данных в хвост)
- remove, pop, pop_back (remove — удалить узел и вернуть данные в определенной точке связанного списка, pop — удалить узел и вернуть данные из головы, pop_back — удалить узел и вернуть данные из хвоста)
- peek/top, peek_back/back, get/get_at (peek/top — возвращаются только данные начала, peek_back/back — возвращаются только данные хвоста, get/get_at — возвращаются данные из определенной точки связанного списка)
- найти/поиск (возвратить первый соответствующий номер индекса или true, если значение присутствует в списке)
- display (отображать все данные списков)
- size/len (возвращает размер связанного списка)
Использование связанного списка
В веб-разработке основное использование связанного списка — это кеширование ссылок поисковым роботом и следующей ссылки от этой ссылки. Больше вы можете узнать здесь https://www.geeksforgeeks.org/applications-of-linked-list-data-structure/
Чтобы визуализировать и четко понять связанный список, вы можете посетить https://visualgo.net/en/list.
Реализация односвязного списка
Односвязный список — это вид связанного списка, в котором каждый узел имеет одно значение и один указатель на следующий узел. Над изображением 1.1 и примером кода находится односвязный список.
Пришло время реализовать односвязный список. Перейдите в каталог кода и создайте файл с именем singly_linked_list.py. Напишите код ниже. Помните, что ваша работа состоит в том, чтобы понять каждый метод, проверить, как он работает. Затем улучшите его для угловых случаев. Вы можете написать тестовые примеры для своего связанного списка.
Реализация двусвязного списка
В двусвязном списке все узлы имеют два указателя. Один будет указывать на предыдущий узел, другой будет указывать на следующий узел.
Теперь ваша задача — реализовать двусвязный список.
Реализация циклического связанного списка
В круговом связанном списке последний узел будет указывать на первый узел.
Ваша задача — реализовать круговой связанный список
Круто, ты сделал это. Вы реализовали три вида связанных списков и поняли основы. Теперь вы хотите узнать о сложности времени и пространства. Я надеюсь, что вы изучили алгоритмы анализа до изучения структур данных и алгоритмов. Чтобы узнать о временных и пространственных сложностях некоторых распространенных структур данных и алгоритмов, я бы посоветовал вам эту ссылку;
Хватит учиться на сегодня.
Любовь к кодированию…