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

Двусвязный список в Python – Расширенная структура данных

Двусвязный список в Python-это связанная структура данных с набором последовательно связанных узлов. Каждый узел имеет три поля.

Автор оригинала: Team Python Pool.

Двусвязный список в Python – Расширенная структура данных

Здравствуйте, программисты, в этой статье вы получите представление обо всем, что вам нужно знать о двусвязном списке в Python . Мы обсудим, что такое двусвязный список и где они используются в программировании на python. Мы также рассмотрим создание двусвязного списка в python и выполнение над ним различных операций. Итак, без дальнейших проволочек давайте начнем с темы.

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

Что такое Двусвязный список в Python?

Двусвязный список в Python-это связанная структура данных с набором последовательно связанных узлов. Каждый узел имеет три поля – два поля связи, которые являются ссылками на адрес предыдущего и следующего узла в последовательности. Кроме того, одно поле данных ссылается на данные этого конкретного узла.

Двусвязный список

Часть данных: хранит данные.

Prev Part: хранит адрес предыдущего узла.

Следующая часть: хранит адрес следующего узла.

Поскольку нет узла до первого узла и после последнего узла, указатель prev первого узла и следующий указатель последнего узла указывают на NULL.

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

Вот что мы подробно узнаем о Двусвязном списке в Python:

  1. Создание и отображение Двусвязного списка в python
  2. Удаление элементов из Двусвязного списка
  3. Переход по Двусвязному списку
  4. Реверсирование двусвязного списка

Создание и отображение Двусвязного списка в Python:

Пример создания Двусвязного списка

class Node:    
    def __init__(self,data):    
       ;    
       ;    
       ;    
            
class DoublyLinkedList:    
    def __init__(self):    
       ;    
       ;    
            
    def addNode(self, data):    
       (data);    
            
        if(self.head):    
           .tail;    
           ;    
           ;    
        else:    
           ;    
           .tail;    
           ;    
           ;    
                
    def display(self):    
       .head;    
        if(self.head):    
            print("List is empty");    
            return;    
        print("Nodes of doubly linked list: ");    
        while(current):     
            print(current.data),;    
           .next;    
                ();    
dList.addNode(1);    
dList.addNode(2);    
dList.addNode(3);    
dList.addNode(4);    
dList.addNode(5);    
     
dList.display();

Выход:

Nodes of doubly linked list:  1 2 3 4 5

Объяснение:

Создание двусвязного списка:- In в этом примере мы определяем класс с тремя переменными-членами: data, nref и pref. Переменная данных будет хранить данные для узла. Ref содержит ссылку на следующий узел, в то время как pref содержит ссылку на предыдущий узел в двусвязном списке. Затем создается класс Двусвязного списка, содержащий различные функции, связанные с двусвязным списком. Два узла класса двусвязного списка изначально указывают на null.

Вставка узлов в двусвязный список:-Функция AddNode() добавляет новые узлы в список. Во-первых, он проверяет, является ли головка нулевой; он вставляет узел в качестве головки. Если заголовок не равен нулю, новый узел присоединяется к концу списка. Наконец, предыдущий указатель нового узла теперь указывает на хвост, и сам новый узел становится хвостом.

Отображение двусвязного списка: функция display() показывает все узлы, присутствующие в списке. Новый узел “текущий” указывает на головку. Все узлы печатаются до тех пор, пока текущие данные не будут равны нулю. На каждой итерации ток будет указывать на следующий узел.

Удаление элементов из Двусвязного списка:

Удаление элементов с самого начала:

def delete_at_start(self):
        if self.start_node is None:
            print("The list has no element to delete")
            return 
        if self.start_node.nref is None:
           
            return
       .start_node.nref
       ;

Удалить элементы из конца:

def delete_at_end(self):
        if self.start_node is None:
            print("The list has no element to delete")
            return 
        if self.start_node.nref is None:
           
            return
       .start_node
        while n.nref is not None:
           .nref

Объяснение:

Удаление из первого: Сначала код проверяет, есть ли в списке один элемент или он пуст. Если у него есть только один элемент, он удаляется, установив предыдущую ссылку этого узла на None. В случае списка, который имеет несколько элементов, то значение начального узла устанавливается на следующий узел, а затем предыдущая ссылка начального узла устанавливается на None.

Удаление с конца: Как и при удалении элемента из первого, список является первым, если он пуст или содержит один элемент. В случае одного узла начальный узел просто устанавливается в значение None. Если список содержит несколько элементов, он повторяется до тех пор, пока не будет достигнут последний узел. Тогда следующая ссылка узла предыдущего узла-None, что в основном удаляет последний узел.

Переход по Двусвязному списку:

Пример обхода Двусвязного списка:

def traverse_list(self):
        if self.start_node is None:
            print("List has no element")
            return
        else:
           .start_node
            while n is not None:
                print(n.data , " ")
               .nref

Объяснение:

Обход двусвязного списка очень похож на обход односвязного списка. Функция traverse_list() добавляется к классу Double Linked List, добавленному ранее. Функция сначала проверяет, пуст ли список. Если нет, то он печатает данные всех узлов при обходе списка.

Реверсирование двусвязного списка:

Пример реверсирования Двусвязного списка

def reverse_linked_list(self):
        if self.start_node is None:
            print("The list has no element to delete")
            return 
       .start_node
       .nref
       
       
        while q is not None:
           .nref
           
           
           .pref

Объяснение:

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

Плюсы и минусы двусвязного списка в Python

Плюсы

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

Аферы

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

Должен Читать

  • Введение в Python Super С примерами
  • Функция справки Python
  • Почему Python sys.exit лучше других функций выхода?
  • Python Bitstring: Классы и другие примеры | Модуль

Вывод

Двусвязный список в Python очень полезен, особенно когда вам нужно выполнить много операций вставки и удаления. Гиперссылки на предыдущие и последующие узлы позволяют довольно просто добавлять и удалять новые компоненты, не следя за их предыдущими и следующими узлами.

В этом руководстве мы увидели, как можно реализовать двусвязный список с помощью Python.