데이터를 노드로 연결해 구성하는 연결 리스트(Linked List)
연결 리스트(Linked List)
는 데이터 요소들이 노드(Node)
라는 단위로 구성되어 서로 연결된 구조를 갖는 자료구조입니다.
각 노드는 데이터
와 다음 노드를 가리키는 포인터(Pointer)
로 이루어져 있습니다.
연결 리스트의 구조와 특성
연결 리스트는 다음과 같은 구조와 특성을 갖습니다.
노드(Node)
연결 리스트의 기본 단위입니다.
각 노드는 데이터와 하나 또는 두 개의 포인터를 포함하며, 포인터는 다음 노드(또는 경우에 따라 이전 노드)를 가리킵니다.
헤드(Head)
연결 리스트의 첫 번째 노드를 가리키는 포인터입니다.
연결 리스트의 시작점을 나타냅니다.
테일(Tail)
연결 리스트의 마지막 노드를 가리키는 포인터입니다.
테일 노드의 포인터는 일반적으로 None
을 가리킵니다.
연결 리스트는 어떻게 구현할 수 있나요?
아래 코드는 파이썬으로 단순 연결 리스트(Singly Linked List)
를 구현한 예제입니다.
파이썬 연결 리스트 구현 예시
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: print(node.data, end=" ") node = node.next print() # 연결 리스트 생성 linked_list = LinkedList(5) # 노드 추가 linked_list.append(12) linked_list.append(7) # 연결 리스트 출력 linked_list.print_all() # 출력: 5 12 7
연결 리스트는 어떤 종류가 있나요?
연결 리스트는 노드가 연결되는 방식에 따라 다음과 같이 나뉩니다.
단일 연결 리스트 (Singly Linked List)
각 노드가 다음 노드만을 가리키는 가장 단순한 형태의 연결 리스트입니다.
이중 연결 리스트 (Doubly Linked List)
각 노드가 이전 노드와 다음 노드를 모두 가리킵니다.
양방향 탐색이 가능하며, 삽입과 삭제가 더욱 효율적입니다.
원형 연결 리스트 (Circular Linked List)
마지막 노드가 첫 번째 노드를 가리키는 구조로, 리스트가 순환됩니다.
순환적 작업에 유용합니다.
연결 리스트와 배열의 비교
특성 | 연결 리스트 | 배열 |
---|---|---|
메모리 할당 | 동적으로 메모리를 할당 | 고정 크기의 연속된 메모리 공간 사용 |
삽입/삭제 연산 | 특정 위치에서의 삽입/삭제가 빠름 | 특정 위치에서 삽입/삭제가 비효율적 |
임의 접근 | 순차적으로만 접근 가능 | 인덱스를 통한 즉시 접근 가능 |
연결 리스트는 메모리 관리와 삽입/삭제 연산이 중요한 경우 유리한 반면, 배열은 임의 접근과 데이터 처리 속도가 중요한 경우 적합합니다.
Mission
0 / 1
연결 리스트의 각 요소를 무엇이라고 부르나요?
포인터
헤드
노드
테일
가이드라인
AI 튜터
배포
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
코드 실행
코드 생성
실행 결과