순환 연결 리스트(circular linked list)를 생성하고 이를 화면에 표시해야 하는 경우, 가장 먼저 '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 linked_list:
def __init__(self):
self.head = None
def add_data(self, my_data):
new_node = Node(my_data)
new_node.next = self.head
self.head = new_node
def print_it(self):
temp = self.head
while(temp):
print(temp.data)
temp = temp.next
my_list = linked_list()
my_list.add_data(47)
my_list.add_data(89)
my_list.add_data(34)
my_list.add_data(11)
print("The circular linked list is : ")
my_list.print_it()
실행 결과
The circular linked list is :
11
34
89
47
코드 설명
- 'Node' 클래스를 생성합니다. 각 노드는 데이터와 다음 노드를 가리키는 참조를 가집니다.
- 필요한 속성들을 포함하는 'linked_list' 클래스를 추가로 생성합니다.
- 'add_data' 메서드를 정의하여 순환 연결 리스트에 새로운 데이터를 추가합니다. 새 노드는 항상 리스트의 맨 앞(head)에 삽입됩니다.
- 'print_it' 메서드를 정의하여 연결 리스트의 데이터를 콘솔에 출력합니다.
- 'linked_list' 클래스의 객체를 생성하고, 해당 객체의 메서드를 호출하여 데이터를 차례대로 추가합니다.
- 마지막으로 'print_it' 메서드를 사용해 리스트 전체를 콘솔에 표시합니다.
참고 사항
위 예제에서는 데이터를 추가할 때마다 새 노드가 head 앞에 삽입되므로, 입력 순서(47 → 89 → 34 → 11)와 반대인 11, 34, 89, 47 순서로 출력됩니다. 완전한 순환 구조를 만들려면 마지막 노드의 next가 head를 다시 가리키도록 설정하면 되며, 이 경우 출력 시 무한 루프를 방지하기 위해 시작 지점을 추적하는 로직이 추가로 필요합니다.