Attention please

리스트와 노드 본문

알고리즘

리스트와 노드

Seongmin.C 2022. 10. 3. 11:49
728x90

리스트

리스트란

순서가 있는 데이터를 나열한 자료구조를 의미합니다.

a = [1,3,5]
b = ['a', 'b', 'c']

위 코드처럼 int, float, str등 여러 자료형의 데이터들을

순서에 맞게 나열한 후 변수에 저장시킬 수 있습니다.

 

 

 

 

 

노드

노드란

연결리스트를 구성하는 각각의 원소들을 의미합니다.

뒤에서 배울 연결리스트가 바로 이 노드들의 연결로 인해 구성됩니다.

 

노드는 DATA포인터를 가집니다.

포인터는 노드와 노드를 연결하는 방향이라고 생각하면 됩니다.

 

 

이와 같이 노드는 개개인의 데이터를 가지며

또 노드끼리 연결될 때 방향을 가지고 있습니다.

 

 

 

 

 

타입 힌트

잠시 타입 힌트에 대해 설명하겠습니다.

 

위의 노드는 클래스로 구성되는데

여러 클래스들을 구성하고 또 연결할 때

어떠한 자료형을 입력값으로 하고 출력값으로 했는지 혼돈이 올 수 있습니다.

 

이를 도와주는 것이 타입힌트 입니다.

from __future__ import annotations
from typing import Any, List, Tuple, Dict

위 코드를 실행시켜야 타입힌트를 코드에 삽입할 수 있습니다.

 

 

어떤 식으로 타입 힌트를 사용하는지 살펴보겠습니다.

def my_sum(a: int, b:int) -> float
	return a + b

위와 같이 입력값과 출력될 값에 대해

어떤 자료형이 들어갈지 명시해 주는 역할을 가집니다.

 

물론 저 자료형에 대해 지키지 않아도 어떤 오류도 일어나지 않습니다.

 

타입힌트는 말 그대로 순전히 힌트일 뿐이며

그저 개발자의 의도를 알 수 있다 정도로 알아두면 되겠습니다.

 

 

 

 

 

노드구현

이번에는 위에서 설명했던 노드를 구현해보겠습니다.

 

노드를 구현할 때는 저번 글에서 설명한 클래스를 이용합니다.

 

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

 

위와 같이 노드는 자신 스스로의 데이터와 다음 노드에 대한 포인터를 가집니다.

 

이번에는 위에서 생성한 노드 클래스를 이용해

여러 노드 객체들을 생성하고 서로 연결까지 해보겠습니다.

 

n0 = Node('A')
n1 = Node('B')
n2 = Node('C')

n0.next = n1  # n0 뒤에 n1을 연결
n1.next = n2  # n1 뒤에 n2를 연결

print(n0.data)
print(n0.next.data)
print(n0.next.next.data)

# 위에서부터 차례대로
# A
# B
# C 
# 출력

위 코드에서 저는

각각 A, B, C 데이터를 가진 n0, n1, n2 이름을 가진 노드 3개를 생성하였습니다.

 

그리고 n0 -> n1 -> n2 순으로 노드를 연결하였습니다.

 

코드 밑 출력하는 부분을 보면

n0에서 시작하여 연결된 노드들에 대한 데이터들 모두

정상적으로 출력되는 것을 확인할 수 있습니다.

 

 

 

 

방금 코드에서는 노드를 생성할 때 파라미터를 data만 주고

연결에 대해서는 따로 "n0.next = n1" 과 같이 연결해주었습니다.

 

이번에는 애초에 노드를 생성할 때 연결이 될 수 있도록 생성하겠습니다.

 

n2 = Node('C')
n1 = Node('B', n2)
n0 = Node('A', n1)

 

애초에 위와 같이 노드를 생성할 때 포인터까지 같이 입력을 하면

이미 연결된 노드들을 생성할 수 있습니다.

 

이 3개의 노드들을 시각적으로 표현하면 다음과 같이 됩니다.

 

 

 

 

 

 

 

728x90

'알고리즘' 카테고리의 다른 글

탐색 알고리즘(선형, 이진, 해시)  (0) 2022.11.11
스택  (0) 2022.10.07
연결리스트  (0) 2022.10.03
클래스와 재귀함수  (0) 2022.10.03
알고리즘 성능평가  (0) 2022.10.02
Comments