Пост Создание связанного списка в Python с примерами впервые появился на QVault Отказ
Связанный список – это линейная структура данных, где элементы не хранятся рядом друг с другом в памяти. Элементы в связанном списке связаны с использованием указателей или ссылок. Связанные списки – это упорядоченная коллекция объектов, аналогична нормальному списку. Связанные списки стоят отдельно от списков в том, как они хранят элементы в памяти. В то время как обычные списки (массивы или ломтики) используют непрерывный блок памяти для хранения ссылок на свои данные, связанные списки хранилища ссылок (указатели) как часть каждого элемента.
источник
Нормальный список – это просто указатель на первый элемент в списке, а конкретный элемент может быть получен, обеспечивая смещение памяти.
Связанный список также просто указатель на первый элемент в списке, но смещения памяти не сделают нам никаких хороших. Нам нужно изучить первый элемент следующий
Указатель, чтобы увидеть, где следующий элемент, то мы можем перейти к нему. Оттуда мы можем найти следующий элемент и так с помощью списка.
Пример ссылка на Python
Узел класс
Во-первых, мы построим Узел
сорт. LinkedList
Класс, который мы в конечном итоге построили, будет список Узел
s.
class Node: def __init__ (self, val): self.val = val self.next = None def set_next(self, node): self.next = node def __repr__ (self): return self.val
Каждый узел имеет валь
Участник данных (информация ИТ-магазины) и A Следующий
Участник данных. Следующий
Участник данных просто указывает на следующую Узел
В списке, если есть один, иначе это Никто
Соединенный список класса Class
class LinkedList: def __init__ (self): self.head = None
Конструктор легко – просто инициализировать пустой голова
указатель. Это указывает на у нас сейчас есть пустой список.
Итализация по списку
Давайте попробуем легко повторять каждый элемент в списке, используя Python’s для _ в _
синтаксис.
def __iter__ (self): node = self.head while node is not None: yield node node = node.next
Реализация Python’s __er____
Способ, мы теперь можем использовать итерационный синтаксис. Например, Для элемента в Linked_List:
Отказ
Добавление в список
Давайте создадим способ добавить элементы на хвост списка, add_to_tail
метод. Он принимает узел в качестве ввода, итерации во всем списке, затем добавляет данный узел к концу.
def add_to_tail(self, node): if self.head == None: self.head = node return for current_node in self: pass current_node.set_next(node)
Снятие из списка
Есть и другие способы удаления предметов из списка, но на данный момент, и, в качестве примера, давайте напишем Удалить из головы
метод.
def remove_from_head(self): if self.head == None: return None temp = self.head self.head = self.head.next return temp
Remove_from_head
Удаляет и возвращает первый элемент из списка, предполагая, что один существует.
Печать связанного списка
Последнее, но не менее важное, мы можем реализовать Python’s __repr__ ()
метод, чтобы мы могли назвать Печать ()
непосредственно в списке и контролировать то, что он напечатан. Вот представление, которое мне нравится:
def __repr__ (self): nodes = [] for node in self: nodes.append(node.val) return " -> ".join(nodes)
Этот метод будет распечатать значение каждого узла в порядке со стрелками между ними. Например, Здравствуйте -> Это -> -> Мой -> Список
Отказ
Применение
linked_list = LinkedList() linked_list.add_to_tail(Node('john')) linked_list.add_to_tail(Node('sally')) linked_list.add_to_tail(Node('jimmy')) print("ll:", linked_list) first = linked_list.remove_from_head() print("removed:", first) print("ll:", linked_list)
Полный связанный код списка пример
class LinkedList: def __init__ (self): self.head = None def __iter__ (self): node = self.head while node is not None: yield node node = node.next def __repr__ (self): nodes = [] for node in self: nodes.append(node.val) return " -> ".join(nodes) def add_to_tail(self, node): if self.head == None: self.head = node return for current_node in self: pass current_node.set_next(node) def remove_from_head(self): if self.head == None: return None temp = self.head self.head = self.head.next return temp class Node: def __init__ (self, val): self.val = val self.next = None def set_next(self, node): self.next = node def __repr__ (self): return self.val
Спасибо за прочтение!
Возьми Курсы компьютерных наук на нашей новой платформе
Следуйте и ударим нас в Twitter @q_vault. Если у вас есть какие-либо вопросы или Комментарии
Подписаться на нашу рассылку для большего количества стран программирования
Оригинал: “https://dev.to/qvault/building-a-linked-list-in-python-with-examples-4df6”