데이터를 노드로 연결해 구성하는 '연결 리스트(Linked List)'
연결 리스트(Linked List)는 데이터 요소들이 노드(Node)라는 단위로 구성되어 서로 연결되어 있는 구조입니다.
각 노드는 데이터와 포인터(Pointer)로 구성되어 있으며, 포인터는 다음 노드를 가리킵니다.
연결 리스트의 구조와 특성
-
노드(Node)
: 연결 리스트의 각 요소를 노드라고 합니다. 각 노드는 데이터와 하나 또는 두 개의 '포인터'(Pointer)를 포함합니다. 포인터는 다음 노드(때로는 이전 노드)를 가리킵니다. -
헤드(Head)
: 연결 리스트의 첫 번째 노드를 가리키는 포인터입니다. -
테일(Tail)
: 연결 리스트의 마지막 노드를 가리키는 포인터입니다.
파이썬 연결 리스트 구현 예시
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self, data):
self.head = Node(data)
self.tail = self.head
def append(self, data):
node = Node(data)
self.tail.next = node
self.tail = node
def print_all(self):
node = self.head
while node is not None:
print(node.data)
node = node.next
linked_list = LinkedList(5)
linked_list.append(12)
linked_list.print_all() # 5 12
연결 리스트 종류
-
단일 연결 리스트(Singly Linked List)
: 각 노드가 다음 노드만을 가리키는 가장 단순한 형태의 연결 리스트입니다. -
이중 연결 리스트(Doubly Linked List)
: 각 노드가 이전 노드와 다음 노드를 모두 가리키는 구조로, 양방향 탐색이 가능합니다. -
원형 연결 리스트(Circular Linked List)
: 마지막 노드가 첫 번째 노드를 가리키는 형태로, 순환 구조를 갖습니다.
연결 리스트와 배열의 비교
-
메모리 할당
: 배열은 고정 크기의 연속적인 메모리 공간을 사용하는 반면, 연결 리스트는 필요에 따라 동적으로 메모리를 할당합니다. -
삽입/삭제 연산
: 배열에서는 삽입과 삭제가 비효율적일 수 있으나, 연결 리스트에서는 상대적으로 간단하고 빠릅니다. -
임의 접근
: 배열은 인덱스를 통한 임의 접근이 가능하지만, 연결 리스트는 순차적 접근만 가능합니다.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!