сегодня я собираюсь поговорить о структуре данных, называемой связанным списком. Это чрезвычайно полезная 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 и присваиваем ему собственную переменную в качестве объекта (поскольку мы все знаем, как мы объявляем объект для класса), затем мы назначили указатель на данные заголовка, а затем данные заголовка на новые данные, поэтому мы вставили наши данные в начало нашего связанного списка.