Key Ponint 💡
링크드 리스트란?
- 연결 리스트 라고도 함
- 배열은 순차적으로 연결된 공간에 데이터를 나열하는 데이터 구조
- 배열은 미리 특정한 연결된 공간을 예약을 하고 거기에 데이터를 쓰고 읽는 구조
- 링크드 리스트는 미리 예약을 하지 않고 필요할 때마다 데이터를 더 추가하는 구조
- 배열의 단점을 극복한 자료구조가
링크드 리스트
라고 한다.- 링크드 리스트는 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조
- 링크드리스트는 데이터와 데이터를 가리키는 주소를 한번에 담고 있고 이것을 하나의 데이터로 부른다.
- 이러한
데이터
+데이터의 주소
=노드(Node)
- 본래 C언어에서는 주요한 데이터 구조이지만, 파이썬은 리스트 타입이 링크드 리스트의 기능을 모두 지원
Key Ponint 💡
링크드 리스트 구조
- 노드(Node) : 데이터 저장 단위(데이터 값, 포인터)로 구성
- 포인터(Pointer) : 각 노드 안에서, 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간
- 즉, 다음 데이터를 가리키는 주소값
Key Ponint 💡
node를 만들기 위해서는 class를 사용하여야 한다.
why? 하나의 노드에는 데이터와 데이터 주소를 저장해야 하기 때문에, 그에 맞는 구조는 클래스가 수월하다.
class Node:
# 객체를 만들때, self가 항상 앞에 붙는다.
# 하지만, 인자로 사용x
def __init__(self, data, next=None): # next=None 두 번째 인자를 넣으면 주소로 인지하고
self.data = data
self.next = next # 주소값을 여기에 넣어준다.
# Node에 인자르 두개 써 넣으면 주소도 입력하고, 그렇지 않으면 None으로 받는다
node1=Node(1) # next=None으로 디폴트 값이므로 인자는 하나만 넣어도 된다.
node2=Node(2)
node1.next=node2 # 노드와 노드의 연결 (next로 연결)
head=node1 # 가장 맨 앞의 노드
print(head) # <__main__.Node object at 0x00000245867501C0> -> node1의 주소값
print(node1.next) # <__main__.Node object at 0x0000024586750AC0> -> node2의 주소값
print(node2.next) # None
Key Ponint 💡
init의 이해
- 컨스트럭터(생성자)라고 불리는 초기화를 위한 함수(메서드)이다.
- 인스턴스화를 실시할 때, 반드시 처음에 호출되는 특수한 함수
- 오브젝트 생성(인스턴스를 생성)과 관련하여 데이터의 초기를 실시하는 함수이다.
class SomeClass:
def __init__(self,something):#constructor
self.something = something
Key Ponint 💡
더블 링크드 리스트 기본 구조