일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- NonNullable
- utilty type
- vue.js
- returnType
- 타입좁히기
- 반복줄이기
- CSS
- 레이아웃쪼개기
- 리액트
- React Native
- 폰트적용하기
- 제네릭
- 2022
- Chart.js
- 커스텀
- click and drag
- typescript
- 개발콘텐츠
- 티스토리꾸미기
- reactjs
- 성능최적화
- TSDoc
- javascript
- 타입스크립트
- react
- 누구나 자료구조와 알고리즘
- React.js
- 공통컴포넌트
- JS console
- const 단언문
- Today
- Total
몽땅뚝딱 개발자
누구나 자료구조와 알고리즘 - (11) 노드 기반 자료구조: 연결 리스트 본문
연결 리스트(linked list)
1.1. 연결 리스트가 유용한 순간
연결 리스트는 배열과 상당히 유사하지만 자료 구조의 성능에 큰 차이가 있다. 가령 세 번째 node에 있는 값을 읽거나 검색하기 위해서는 첫 번째부터 접근하여 순차적으로 진행해야 하므로 O(N)이다. 따라서 읽기와 검색에서는 유의미한 차이가 없지만 연결 리스트는 삽입에서 빛을 발휘한다.
배열에서 최악의 시나리오는 인덱스 0에 데이터를 삽입하거나 삭제할 때이다. 나머지 데이터를 한 셀씩 오른쪽으로 옮겨야 하기 때문에 효율성은 O(N)이 된다. 반면 연결 리스트는 딱 한 단계인 O(1)만 걸린다. 삽입하는 경우 배열처럼 한 셀씩 옮기는 것이 아니라 기존 리스트 앞에 새 노드를 생성하고 노드가 이전의 첫 번째 노드를 가리키도록 만들면 된다. 삭제하는 경우에 삭제하는 셀 그 다음부터 시작하도록 연결 리스트를 바꾸면 된다.
배열과 연결 리스트의 삽입, 삭제를 비교하면 다음 표와 같다.
시나리오 | 배열 | 연결 리스트 |
앞에 삽입/삭제 | 최악의 경우 | 최선의 경우 |
중간에 삽입/삭제 | 평균적인 경우 | 평균적인 경우 |
끝에 삽입/삭제 | 최선의 경우 | 최악의 경우 |
삭제된 노드를 처리하는 방식은 프로그래밍 언어마다 다르나 어떤 언어에서는 쓰이지 않는 노드를 자동으로 감지해 "가비지 컬렉트"하고 메모리를 해제한다.
1.2. 효율적으로 연결 리스트 사용하기
시나리오 | 배열 | 연결 리스트 |
읽기 | O(1) | O(N) |
검색 | O(N) | O(N) |
삽입 | O(N) (끝에서 하면 O(1)) | O(N) (앞에서 하면 O(1)) |
삭제 | O(N) (끝에서 하면 O(1)) | O(N) (앞에서 하면 O(1)) |
이 표만 보면 배열과 효율성에 별 차이가 없다. 연결 리스트가 효과적으로 쓰이려면 실제 삽입과 삭제 단계가 O(1)라는 점을 활용해야 한다. 전형적인 연결 리스트에서 일부를 조금 수정해 연결 리스트를 향상시킬 수 있다.
이중 연결 리스트는 각 노드에 2개의 링크가 있다는 점만 제외하면 연결 리스트와 비슷하다. 각각의 링크는 다음 노드와 앞 노드를 가리킨다. 그래서 전형적인 연결 리스트는 앞으로만 이동할 수 있지만 이중 연결 리스트는 앞과 뒤 모두 이동할 수 있다. 이중 연결 리스트로 큐를 구현함으로써 삽입과 삭제에 O(1)만 걸린다.
출처
제이 웹그로우, 누구나 자료구조와 알고리즘 (길벗, 2021)
개인적으로 공부한 내용을 정리하는 블로그로
잘못된 개념을 게시하지않도록 주의하고 있으나 오류가 있을 수 있습니다.
'Development > 알고리즘' 카테고리의 다른 글
누구나 자료구조와 알고리즘 - (13) 그래프 (0) | 2023.10.03 |
---|---|
⭐️ 누구나 자료구조와 알고리즘 - (12) 노드 기반 자료구조: 트리(Tree) - 힙(Heap), 트라이(trie) (0) | 2023.10.01 |
누구나 자료구조와 알고리즘 - (10) 퀵 정렬(Quicksort) (0) | 2023.09.29 |
누구나 자료구조와 알고리즘 - (9) 재귀 (0) | 2023.09.28 |
누구나 자료구조와 알고리즘 - (8) 스택과 큐 (0) | 2023.09.28 |