Python에서 원형 연결 리스트(Circular Linked List)를 생성하려면 먼저 'Node' 클래스를 정의해야 합니다. 노드에 저장된 데이터를 화면에 출력하기 위해서는 별도의 메서드를 추가로 정의하면 됩니다. Node 클래스에는 두 가지 핵심 속성이 있는데, 하나는 노드에 담긴 데이터(data)이고, 다른 하나는 연결 리스트의 다음 노드(next)에 접근하기 위한 참조입니다.
원형 연결 리스트의 가장 큰 특징은 헤드(head)와 꼬리(rear)가 서로 인접해 있다는 점입니다. 즉, 마지막 노드가 다시 첫 번째 노드와 연결되어 하나의 원(circle)을 형성하며, 일반 연결 리스트와 달리 마지막 노드에 'NULL' 값이 존재하지 않습니다.
또한 초기화 함수를 포함하는 'linked_list' 클래스를 별도로 작성해야 하며, 이 함수에서 리스트의 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' 함수는 첫 번째 요소, 즉 'head'를 'None'으로 초기화하는 역할을 합니다.
- 'add_data' 메서드를 정의하여 원형 연결 리스트에 새로운 데이터를 추가합니다.
- 'print_it' 메서드를 정의하여 연결 리스트의 데이터를 콘솔에 출력합니다.
- 'linked_list' 클래스의 객체를 생성한 뒤, 해당 객체의 메서드를 호출하여 데이터를 추가합니다.
- 마지막으로 'print_it' 메서드를 사용해 결과를 콘솔에 출력합니다.
참고 사항
위 예제에서 데이터가 12 → 78 → 56 순서로 출력되는 이유는 새 데이터가 항상 리스트의 맨 앞(head)에 삽입되기 때문입니다. 또한 출력 부분의 print("%d" %(temp.data))는 Python 2 문법이므로, Python 3 환경에서는 print(temp.data) 형태로 수정해서 사용하는 것이 좋습니다.