컴퓨터 공학 분야 별 지식/알고리즘

연결 리스트

N돌핀 2021. 9. 20. 20:28

블로그를 시작하는 이유는 여러가지가 있겠지만,

아무래도 자신이 공부한 것을 남들이 보기 편하게 정리하다 보면 본인도 다시 찾아보기 쉬워서인 것 같다.

아무튼 남과 나를 돕고자 블로그 활동을 시작하려고 한다.


오늘 간단히 정리할 내용은 연결 리스트라는 자료구조이다.

연결 리스트(linked list)의 정의 :

각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 자료구조.

라고 나와 있는데

여기서 포인터란 다음 노드의 주소를 말한다.

 

배열이랑 비교하면 둘 다 순서가 있는 자료구조지만

배열은 메모리상에 연속적으로 있어서 다음 주소를 'type크기'만큼 더해 알 수 있는 녀석이고

연결 리스트는 어떤 노드가 "내 다음 순서는 OO에 있는 노드야"라는 정보를 가지고 있는 것이다.

 

종류는 흔히 3가지가 있는데.

1. 단일 연결 리스트 : 다음 노드의 주소만 가지고 있다.

2. 이중 연결 리스트 : 다음 노드와 앞 노드의 주소도 가지고 있다.

3. 원형 연결 리스트 : 마지막 노드가 다음 노드의 주소로 첫번째 노드의 주소를 가지고 있다.

 

가장 기본적인 자료구조인 배열과 위와 같은 구현의 차이점 때문에 여러가지 차이가 생기는데...표로 보는게 편하다.

원소 크기 N 배열 연결 리스트
k번째 원소접근 O(1) O(k)
임의 위치 원소 추가/제거 O(N) O(1)
메모리 상의 배치 연속 불연속
추가 공간 - O(N)

여기서 임의의 위치에 원소를 추가/제거하는 것은 행하는 위치의 주소가 주어져야 한다.(맨 앞, 뒤는 애초에 저장하고 있다)

연결 리스트에서는 데이터 말고도 다음 노드를 가리키는 주소가 추가적으로 저장되어야 해서 64bit컴퓨터에서 주소값이 64bit(8byte)라 8*N만큼의 추가 공간 즉 O(N)이 필요하다. (이중 연결 리스트의 경우 16*N)

혹시 O(N)등의 의미를 모르겠다면 인터넷에 빅오 표기법을 찾아보길 바란다.