Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで双方向リンクリスト(Doubly Linked List)を作成・表示する方法【サンプルコード付き】

双方向リンクリスト(Doubly Linked List)の要素を作成して表示するには、まず「Node」クラスを定義する必要があります。このクラスには3つの属性を持たせます。ノードが保持するデータ、リンクリスト内の次のノードへの参照、そして前のノードへの参照です。前後どちらのノードにもアクセスできる点が、双方向リンクリストの大きな特徴です。

以下に具体的な実装例を示します。

サンプルコード

class Node:
    def __init__(self, my_data):
        self.prev = None
        self.data = my_data
        self.next = None

class double_list:
    def __init__(self):
        self.head = None
        self.tail = None

    def add_data(self, my_data):
        new_node = Node(my_data)
        if(self.head == None):
            self.head = self.tail = new_node
            self.head.prev = None
            self.tail.next = None
        else:
            self.tail.next = new_node
            new_node.prev = self.tail
            self.tail = new_node
            self.tail.next = None

    def print_it(self):
        curr = self.head
        if (self.head == None):
            print("リストは空です")
            return
        print("双方向リンクリストのノードは以下の通りです:")
        while curr != None:
            print(curr.data)
            curr = curr.next

my_instance = double_list()
print("双方向リンクリストに要素を追加しています")
my_instance.add_data(10)
my_instance.add_data(24)
my_instance.add_data(54)
my_instance.add_data(77)
my_instance.add_data(92)
my_instance.print_it()

実行結果

双方向リンクリストに要素を追加しています
双方向リンクリストのノードは以下の通りです:
10
24
54
77
92

コードの解説

  • まず、各ノードの構造を表す「Node」クラスを作成します。コンストラクタ内で、前のノードへの参照(prev)、保持するデータ(data)、次のノードへの参照(next)を初期化します。
  • 次に、リンクリスト本体を管理する「double_list」クラスを作成します。先頭ノードを指すheadと、末尾ノードを指すtailを持ちます。
  • 「__init__」メソッドでは、headとtailをNoneで初期化し、空のリスト状態からスタートできるようにしています。
  • 「add_data」メソッドは、新しいノードをリストの末尾に追加するためのメソッドです。リストが空の場合は新ノードがhead兼tailとなり、すでに要素がある場合はtailの後ろに接続したうえでtailを更新します。
  • 「print_it」メソッドは、headから順にnextをたどりながら全ノードのデータを表示します。リストが空の場合はその旨を出力して処理を終了します。
  • 最後に「double_list」クラスのインスタンスを生成し、add_dataメソッドで5つの値(10、24、54、77、92)を順番に追加します。
  • print_itメソッドを呼び出すことで、追加されたすべてのノードのデータがコンソールに表示されます。

このように、双方向リンクリストは各ノードが前後両方のノードを参照するため、片方向リンクリストと比べて逆方向への走査が容易になるというメリットがあります。

  1. 循環リンクリスト内の要素を検索するPythonプログラム

    循環リンクリストとは循環リンクリスト(Circular Linked List)は、通常のリンクリストと異なり、最後のノードが先頭ノードに接続されているデータ構造です。そのため、リスト内に「NULL」で終わるノードが存在せず、head(先頭)とtail(末尾)が互いに隣接し、円を形成するように連結されています。循環リンクリスト内の特定の要素を検索するには、まず「Node」クラスを作成する必要があります。このクラスには、ノードに格納されるデータと、次のノードへの参照という2つの属性を持たせます。さらに、初期化関数を持つ別のクラスを作成し、headノードを「None」で初期化します。そして、リスト

  2. Pythonで3Dリスト(3次元配列)を作成する方法【サンプルコード付き】

    3Dリストとは、いわゆる3次元配列のことです。本記事では、Pythonで3Dリストを作成し、その内容を整形して出力するプログラムを解説します。ここでは例として、文字列「*」を初期値とする3×2×2の3次元リストを生成しますが、仕組みを理解すれば整数など任意の要素を持つ配列にも簡単に応用できます。 3Dリストのイメージ 3次元リストは、リストの中にリスト、さらにその中にリストが入った多段構造のデータです。たとえば、3×3×2の3Dリストは次のように表現できます。 [[1,1,1],[2,2,2],[3,3,3]], [[4,4,4],[5,5,5],[6,6,6]] アルゴリズム ステップ1: