сегодня я собираюсь поговорить о структуре данных, называемой связанным списком. Это чрезвычайно полезная DS с точки зрения решения проблем! давайте начнем с того, что на самом деле представляет собой связанный список:
Примечание: я собираюсь реализовать все свои примеры в коде Python!
Как вы можете видеть, первые данные в связанном списке называются головными данными, а с указателями элементы связаны друг с другом, и по этой причине последний является нулевым. связанный список — это линейная структура данных, и, в отличие от массивов, элементы не хранятся в непрерывном месте. они имеют ряд связанных узлов, и каждый узел имеет данные и указатель. теперь давайте реализуем это в коде. традиционный способ в python таков:
#linked list is completely empty ; class Node : def __init__(self,data): self.data = data ; self.next = None ; class Linked_List : def __init__(self): self.head = None ;
как мы добавим к нему некоторые данные:
class Node : def __init__(self,data): self.data = data ; self.next = None ; class Linked_List : def __init__(self): self.head = None ; obj = Linked_List() ; obj.head = Node("ali") ; second_data = Node("peter") ; third_data = Node("sam") ; # now , they're not linked yet , let's link them together obj.head.next = second_data ; second_data.next = third_data ; # they are linked now ! and third data next is Null .
Отличная работа ! теперь мы хотим увидеть обход связанного списка, что является важной концепцией в DS:
def Print(self): v = self.head ; while v is not None: print(v.data) ; v = v.next ; else : return False ;
Довольно легко ! мы объявили значение и присвоили его данным заголовка. затем с помощью цикла while мы проверяем, что данные не являются Null, если это не так, функция печатает данные и с помощью указателя переходит к следующему значению, и если значение нашей головы равно None, функция возвращает логическое значение False.
Теперь давайте поговорим о вставке значения в связанный список.
def Insert(self,new_data): new_data = Node(new_data) ; new_data.next = self.head ; self.head = new_data ;
на мой взгляд, это немного сложно, но позвольте мне объяснить это правильно: мы помещаем данные в конструктор класса Node и присваиваем ему собственную переменную в качестве объекта (поскольку мы все знаем, как мы объявляем объект для класса), затем мы назначили указатель на данные заголовка, а затем данные заголовка на новые данные, поэтому мы вставили наши данные в начало нашего связанного списка.