Pythonで循環リンクリストを実装するプログラム
Pythonでリンクリストを生成するプログラムを作成するには、まず「Node」クラスを定義する必要があります。また、循環リスト内のデータ要素を表示するために、データを出力する専用のメソッドを別途定義することもできます。
この「Node」クラスには2つの属性があります。1つはノードに格納されるデータ(data)、もう1つはリンクリストにおける次のノードへの参照(next)です。循環リンクリストでは、先頭(head)と末尾(rear)が互いに隣接しており、全体が円を形成するように連結されています。そのため、最後のノードに「NULL」値が存在しないのが特徴です。
さらに、「circularLinkedList」クラスも作成する必要があります。このクラスには初期化関数(__init__)が含まれており、リストの先頭である「head」は「None」で初期化されます。
以下に実際の実装例を示します。
コード例
class Node:
def __init__(self, my_data):
self.data = my_data
self.next = None
class circularLinkedList:
def __init__(self):
self.head = None
def add_data(self, my_data):
ptr_1 = Node(my_data)
temp = self.head
ptr_1.next = self.head
if self.head is not None:
while(temp.next != self.head):
temp = temp.next
temp.next = ptr_1
else:
ptr_1.next = ptr_1
self.head = ptr_1
def print_it(self):
temp = self.head
if self.head is not None:
while(True):
print("%d" %(temp.data)),
temp = temp.next
if (temp == self.head):
break
my_list = circularLinkedList()
print("Elements are added to the list ")
my_list.add_data (56)
my_list.add_data (78)
my_list.add_data (12)
print("The data is : ")
my_list.print_it()
出力結果
Elements are added to the list
The data is :
12
78
56
処理の解説
- まず「Node」クラスを作成します。
- 次に、必要な属性を持つ「circularLinkedList」クラスを作成します。
- このクラスには「__init__」(init)関数があり、最初の要素である「head」を「None」で初期化するために使用されます。
- 「add_data」という名前のメソッドを定義し、循環リンクリストにデータを追加できるようにします。
- さらに「print_it」というメソッドを定義し、リンクリストのデータをコンソールに表示できるようにします。
- 「circularLinkedList」クラスのオブジェクトを生成し、そのメソッドを呼び出してデータを追加します。
- 最後に「print_it」メソッドを使用して、結果をコンソールに表示します。
-
循環リンクリスト内の要素を検索するPythonプログラム
循環リンクリストとは循環リンクリスト(Circular Linked List)は、通常のリンクリストと異なり、最後のノードが先頭ノードに接続されているデータ構造です。そのため、リスト内に「NULL」で終わるノードが存在せず、head(先頭)とtail(末尾)が互いに隣接し、円を形成するように連結されています。循環リンクリスト内の特定の要素を検索するには、まず「Node」クラスを作成する必要があります。このクラスには、ノードに格納されるデータと、次のノードへの参照という2つの属性を持たせます。さらに、初期化関数を持つ別のクラスを作成し、headノードを「None」で初期化します。そして、リスト
-
Pythonで連結リストを逆順に反転するプログラム【再帰を使った実装方法】
はじめに 連結リスト(リンクリスト)が与えられたとき、それを逆順に並べ替えることを考えます。例えば、リストが 2 → 4 → 6 → 8 の場合、反転後の新しいリストは 8 → 6 → 4 → 2 となります。 本記事では、再帰処理を用いてこの問題を解く方法を、アルゴリズムの考え方から実際のコードまで詳しく解説します。 解決のためのアプローチ この問題は、各ノードの next ポインタの向きを先頭から順番に付け替えていくことで解決できます。具体的には、以下の手順に従います。 solve(head, back) という手続きを定義し、リストの反転を再帰的に行う head が存在しない(空の)