포시코딩

Linked List 구현 using class in Python (1) 본문

자료구조알고리즘/이론

Linked List 구현 using class in Python (1)

포시 2022. 11. 23. 19:08
728x90

js 또는 java에서의 class에 대한 기초 지식이 있다는 가정하에 작성된 글입니다.

 

class in Python

파이썬에서는 생성자 함수의 이름이 __init__ 으로 고정되어 있다. 생성 시 생기는 self는 객체 자기 자신을 가리킨다.

파라미터를 따로 넣을 필요 없이 알아서 넣어줌

class Person:
  def __init__(self):
    print('hi')
        
person = Person()	# hi가 출력됨

추가로 아래처럼 self를 사용해서 객체에 데이터를 쌓을 수 있다.

class Person:
  def __init__(self, param_name):
    self.name = param_name

 

메소드를 추가할 때도 self가 자동으로 붙는데 만들어보면 다음과 같다.

class Person:
  def __init__(self, param_name):
    self.name = param_name
    
  def talk(self):
    print(f'안녕하세요 저는 {self.name} 입니다.')

 

 

갑자기 왜 class?

링크드 리스트는 기차로 예를 들 수 있다. ex) train = ['기관실'] -> ['시멘트'] -> ['자갈'] ...

노드는 두 가지 정보가 필요하다.

  • 칸에 있는 데이터
  • 다음 칸이 뭔지

위 두 가지 데이터를 가지고 있어야 하는 이유로 클래스를 사용하는게 적절하다.

class Node:
  def __init__(self, data):
    self.data = data	
    self.next = None	# 현재 다음 이어진 노드가 없기 때문에 None을 넣는다.

위 클래스를 이용해 두 노드를 만들어 연결하면 다음과 같다.

first_node = Node(5)	# [5]
second_node = Node(12)	# [12]
first_node.next = second_node	# [5] -> [12]

하지만 이와 같은 방식은 노드의 개수가 늘어날수록 코드가 늘어나기 때문에 효율이 좋지 않다.

 

따라서 LinkedList 라는 클래스를 만든 후 head node를 하나만 들고 있게 하는 방법이 있다.

(기차로 다시 예시를 들면 맨 앞 머리칸만 저장해두는거다. 다음 칸을 보기 위해선 next를 통해 다음 노드에 접근해야 한다.)

class LinkedList:
  def __init__(self, value):
    self.head = Node(value)

 

다음 포스팅에서 위에서 만든 LinkedList 클래스를 통해 LinkedList의 노드를 다루는 여러 방법들을 알아보자

https://4sii.tistory.com/100

 

Linked List 구현 using class in Python (2)

맨 뒤에 노드 추가하기 class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self, value): self.head = Node(value) 저번 포스팅에서 LinkedList를 위해 위와 같은 클래스를 만드는 것

4sii.tistory.com

 

728x90