Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

n개의 노드로 이중 연결 리스트를 생성하고 노드 개수를 세는 Python 프로그램

이중 연결 리스트(doubly linked list)의 노드 개수를 세려면 먼저 'Node' 클래스를 정의해야 합니다. 이 클래스에는 세 가지 속성이 포함됩니다. 노드에 저장된 데이터(data), 다음 노드에 대한 참조(next), 그리고 이전 노드에 대한 참조(prev)입니다.

이중 연결 리스트의 각 노드는 포인터(참조)를 가집니다. 현재 노드는 다음 노드와 이전 노드를 모두 가리키며, 리스트의 마지막 노드의 next 포인터는 None 값을 갖습니다. 이러한 구조 덕분에 이중 연결 리스트는 양방향으로 자유롭게 순회할 수 있다는 큰 장점이 있습니다.

아래는 이를 구현한 전체 예제입니다.

예제

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

class count_val:
   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 count_node(self):
      my_counter = 0
      curr = self.head
      while(curr != None):
         my_counter = my_counter + 1
         curr = curr.next
      return my_counter

   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 = count_val()
print("리스트에 요소를 추가하는 중입니다")
my_instance.add_data(10)
my_instance.add_data(14)
my_instance.add_data(24)
my_instance.add_data(17)
my_instance.add_data(22)
my_instance.print_it()
print("이중 연결 리스트의 노드 개수는 다음과 같습니다 : ")
print(my_instance.count_node())

출력

리스트에 요소를 추가하는 중입니다
노드 목록 :
10
14
24
17
22
이중 연결 리스트의 노드 개수는 다음과 같습니다 :
5

코드 설명

  • 'Node' 클래스가 생성됩니다. 이 클래스는 prev, data, next 세 가지 속성을 초기화하며, 새로운 노드의 기본 구조를 담당합니다.
  • 필요한 속성을 가진 'count_val' 클래스가 별도로 생성됩니다.
  • 'add_data' 메서드가 정의되어, 이중 연결 리스트의 끝에 새로운 데이터를 추가합니다. 리스트가 비어 있으면 head와 tail이 모두 새 노드를 가리키고, 그렇지 않으면 기존 tail 뒤에 노드를 연결합니다.
  • 'count_node' 메서드가 정의되어, head부터 시작해 next 포인터를 따라가며 노드 개수를 하나씩 증가시켜 최종 개수를 반환합니다.
  • 'print_it' 메서드가 정의되어, 리스트가 비어 있는지 확인한 후 모든 노드의 데이터를 순서대로 출력합니다.
  • '__init__' 메서드에서 head와 tail 노드가 None으로 초기화되어 빈 리스트 상태로 시작합니다.
  • 'count_val' 클래스의 객체가 생성되고, 5개의 데이터(10, 14, 24, 17, 22)가 차례대로 추가된 후 각 메서드가 호출됩니다.
  • 'count_node' 메서드가 실행되면 리스트를 처음부터 끝까지 순회하면서 노드의 총 개수인 5를 계산합니다.
  • 마지막으로 노드 목록과 노드 개수가 콘솔에 출력됩니다.