Рубрики
Без рубрики

Связанные списки в Python

Изучение связанных списков через код Python. Tagged с Python, LinkedLists.

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

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

Красные против черных рубашек

Разница заключается в физическом и логическом месте ваших данных. Вы можете подумать об этом немного подобным; Есть по две группы по восемь человек, и они оба входят в большой столовую, полную других людей. Первая группа носит красные рубашки, и они возглавляют главу группы. Все они держатся за руки со следующим человеком в очереди. Таким образом, они все знают, где они должны быть, потому что они держат руку следующего человека впереди, и они находятся в одной смежной коробке. Другая группа носит все черные рубашки, и они возглавляют первый узел. У них есть знаки, прикрепленные к их спине, ссылаясь на то, в каком порядке они находятся на блок данных.

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

Типы связанных списков

Списки с особым числом: Связанный список, связанный с единственным числом, – это список, в котором каждый узел ссылается только на следующую ссылку в списке. Конечный узел не ссылается на что -либо, сигнализирующее на конец списка. Чтобы расширить наши рубашки метафоры, у каждого человека (узла) в черных рубашках знак, ссылаясь на следующего человека, впереди его в очереди.

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

Связанные списки в Python

Связанные списки могут быть сложно запомнить, но как только вы выясните, это отличный способ организовать данные, и вы видите, что вы видите в технических или кодирующих интервью. На самом деле, зная кучи, другие структуры данных могут сильно помочь в этих кодирующих интервью. Немного математики тоже я нахожу. Для меня зная, что этот материал великолепен, однако мне также нужно иметь возможность думать об этих методах с точки зрения кодирования. Я могу посмотреть на все картинки и подумать обо всех метафорах, которые я хочу; Однако, пока я не смогу это кодировать и объяснить кому -то, я обнаружил, что у меня все еще есть проблемы.

Давайте создадим новый файл с именем list.py и введите новый класс под названием Node и вставьте наши атрибуты для создания узлов.

class Node:
    def __init__(self, data=None, next=None):
        self. data = data
        self.next = next
    def __str__(self):
        return str(self.data)

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

Теперь, если мы пойдем вперед и запустим интерпретатор Python и введем нашу оператору импорта, мы сможем импортировать наш файл списка.

>>> from list import Node

Тогда мы можем начать создавать наши узлы.

>>> node1 = Node(23)
>>> node2 = Node(25)
>>> node3 = Node(45)
>>> node4 = Node(77)

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

>>> print(node2)
25

Теперь мы можем пройти и установить следующий метод наших узлов для ссылки на следующий узел в списке.

>>> node1.next = node2
>>> node2.next = node3
>>> node3.next = node4

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

def print_list(node):
    while node:
        print(node),
        node = node.next
    print

Итак, мы импортируем наш метод print_list, чтобы мы могли распечатать наш список.

>>> from test import print_list
>>> print_list(node1)
23
25
45
77

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

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

class Node:
    def __init__(self, data=None, before=None, next=None):
        self. data = data
        self.next = next
        self.before = before
    def __str__(self):
        return str(self.data)

Создание ссылок на наши предыдущие узлы так же просто, как и создание следующих ссылок.

>>> node2.before = node1
>>> node3.before = node2
>>> node4.before = node3

Это изучает связанные списки через Python. Я надеюсь, что это было несколько полезно в понимании связанных списков. Есть учебники информации об этом материалах онлайн и в школах. Получение большего количества в кучах и различных структурах данных также помогает понять, как некоторые из этих материалов полезны в разработке программного обеспечения. Единственным предостережением в создании этих списков в Python является то, что Python является языком высокого уровня, подлежащим нескольким различным уровням абстракции перед запуском. Однако это служит хорошим примером того, как эти списки структурированы.

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

http://www.openbookproject.net/thinkcs/python/english2e/ch18.html

http://www.necessaryandsufficient.net/2008/05/differences-between-arrays-and-linked-lists/

https://medium.com/basecs/whats-a-linked-list-anyway-part-1-d8b7e6508b9d

https://medium.com/basecs/whats-a-linked-list-anyway-part-2-131d96f71996

Оригинал: “https://dev.to/georgeoffley/linked-lists-in-python”