연결 리스트(Linked List)란?
- 연결 리스트는 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조이다.
- 배열은 순차적으로 연결된 공간에서 데이터를 나열하는 데이터 구조이다.
- 파이썬은 리스트 타입이 연결 리스트의 기능을 모두 지원한다.
구조
- 노드(Node): 데이터 저장 단위(데이터값, 포인터)로 구성된다.
- 위 이미지의 경우 노드가 세개이다.
- 포인터(Pointer): 각 노드 안에서, 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간이다.
- 위 이미지의 경우 화살표가 시작되는 부분이 포인터이다.
간단한 연결 리스트
노드 구현
1 |
|
노드와 노드 연결(포인터 활용)
1 |
|
데이터 추가
1 |
|
데이터 출력
1 |
|
장단점
장점
- 미리 데이터 공간을 미리 할당하지 않아도 된다.
- 배열은 미리 데이터 공간을 할당해야한다.
단점
- 연결을 위한 별도 데이터 공간이 필요하므로, 저장 공간 효율이 높지는 않다.
- 연결 정보를 찾는 시간이 필요하므로 접근 속도가 느리다.
- 중간 데이터 삭제 시, 앞 뒤 데이터의 연결을 재구성해야하는 부가적인 작업이 필요하다.
복잡한 기능1(데이터 추가)
- 데이터 사이에 데이터를 추가하는 유지 관리에 부가적인 구현이 필요하다.
코드
- 사이에 추가하는 기능을 구현해볼 것이다.
1 |
|
OOP로 구현
1 |
|
복잡한 기능2(노드 삭제)
1 |
|
다양한 연결 리스트
이중 연결 리스트
- 더블 링크드 리스트라고도 하며 양방향으로 연결되어있어 노드 탐색이 양쪽으로 모두 가능하다.
- 탐색이 느린 단점을 보완했다고 볼 수 있다.
구현
1 |
|
중간에 삽입하는 함수 생성해보기.