Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 공룡게임
- class
- 자료구조
- 게임
- 정렬
- Queue
- MongoDB
- react
- Bull
- OCR
- AWS
- Nest.js
- nestjs
- JavaScript
- mongoose
- game
- cookie
- jest
- TypeScript
- MySQL
- Dinosaur
- typeORM
- Express
- dfs
- GIT
- Python
- flask
- nodejs
- Sequelize
Archives
- Today
- Total
포시코딩
Linked List 구현 using class in Python (1) 본문
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의 노드를 다루는 여러 방법들을 알아보자
728x90
'자료구조알고리즘 > 이론' 카테고리의 다른 글
재귀 함수 - 팩토리얼!, 회문 검사 (0) | 2022.11.24 |
---|---|
이진 탐색(Binary Search), 시간 복잡도 O(log N) (0) | 2022.11.24 |
Linked List 구현 using class in Python (2) (0) | 2022.11.23 |
Array(어레이), Linked List(링크드리스트) (0) | 2022.11.23 |
시간복잡도의 점근 표기법 (Big-O, Big-Ω) (0) | 2022.11.22 |