알고리즘

[자료구조] 배열, 연결리스트

2023. 8. 29. 16:15
목차
  1. 연결리스트
  2. 연결리스트의 종류
  3. 배열 vs 연결리스트

연결리스트

  • 연결리스트(Linked List)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다.
  • 각 노드는 다음 노드를 가리키는 포인터를 포함한다.

 

연결리스트의 종류

단순(단방향) 연결리스트

단일 연결 리스트(Singly linked list)는 각 노드에 자료 공간과 한 개의 포인터 공간이 있고, 각 노드의 포인터는 다음 노드를 가리킨다.

 

이중(양방향) 연결리스트

단순 연결 리스트(Singly Linked List)는 next로 현재 노드에서 다음 노드로 갈 수 있지만 이전 노드로는 갈 수 없다. 이러한 단점을 해결하기 위해 노드에 앞 노드의 메모리 주소를 보관하는 포인터 prev를 만들어준 형태를 이중 연결 리스트(Doubly Linked List)라고 한다.

 

원형 연결리스트

원형 연결 리스트(Circle linked List)란 단순 연결 리스트(Singly Linked List)의 마지막 노드의 포인터가 NULL이 아닌 헤드를 가리키는 형태의 리스트다. 따라서 리스트의 끝이 존재하지 않는다.

 

배열 vs 연결리스트

접근 시간 복잡도

배열: O(1)

인덱스 n의 요소에 바로 접근할 수 있다.

 

연결리스트: O(n)

인덱스 n의 요소에 접근하려면 연결된 링크를 따라 n번 이동한다.

 

탐색 시간 복잡도

배열: O(n)

0번째 인덱스 요소부터 마지막 인덱스 요소까지 접근하면서 원하는 데이터를 찾는다.

 

연결리스트: O(n)

배열과 동일하게 0번째 인덱스 요소부터 마지막 인덱스 요소까지 접근하면서 원하는 데이터를 찾는다.

 

삽입/삭제 시간 복잡도

배열: O(n)

데이터를 삽입, 삭제하기 위해 기존의 데이터를 옮기는 작업이 필요하다. 예를 들어 0번째 인덱스에 데이터를 삽입하기 위해서는 현재 배열의 0번째 인덱스부터 마지막 인덱스까지의 데이터들을 모두 한 칸씩 뒤로 옮겨야 한다. 하지만 배열의 마지막에 데이터를 삽입하거나 삭제하는 경우에는 O(1)의 시간 복잡도를 가진다.

 

연결리스트: O(1)

삽입, 삭제할 노드의 주변 노드들의 Link만 수정하면 된다. 따라서 삽입, 삭제 연산 자체는 시간 복잡도가 O(1)이다. 그렇지만 삽입, 삭제할 노드를 탐색하는 과정이 필요하기 때문에 최악의 경우 O(n)의 시간 복잡도가 필요하다. 만약 가장 앞이나 뒤에 삽입한다면 O(1)의 시간 복잡도를 가진다.

 

배열 or 연결리스트

  • 데이터의 양이 많고 삽입/삭제가 없음. 데이터 검색을 많이 해야할 때 → 배열 사용
  • 데이터의 양이 적고 삽입/삭제 빈번함 → 연결리스트 사용

 


참고 자료

https://hyeinisfree.tistory.com/64#recentComments

https://github.com/gyoogle/tech-interview-for-developer/blob/ed8c9810be6eb6404c13d9a03661809e6d27e8a0/Interview/Interview%20List.md?plain=1#L53 

 

'알고리즘' 카테고리의 다른 글

다이나믹 프로그래밍  (0) 2023.05.09
프로그래머스 lv.2 전력망을 둘로 나누기  (1) 2023.05.02
완전탐색  (0) 2023.04.25
DFS/BFS  (0) 2023.04.11
[자료구조] 스택/큐  (0) 2023.04.04
  1. 연결리스트
  2. 연결리스트의 종류
  3. 배열 vs 연결리스트
'알고리즘' 카테고리의 다른 글
  • 다이나믹 프로그래밍
  • 프로그래머스 lv.2 전력망을 둘로 나누기
  • 완전탐색
  • DFS/BFS
JeanneLee57
JeanneLee57
공부하고 기록을 남기는 개발자 Jeanne
JeanneLee57
코딩은 진리
JeanneLee57
전체
오늘
어제
  • 분류 전체보기 (116)
    • Javascript (15)
    • React (15)
    • Next.js (8)
      • Next.js 베타 문서 번역 (5)
    • 프로젝트 (34)
      • 미니 프로젝트 & 과제 (25)
      • SEB 44 pre-project (1)
      • SEB 44 main-project (8)
    • 알고리즘 (12)
    • 부트캠프 준비 (6)
    • 기술면접 (3)
    • CS (7)
    • 코드스테이츠 프론트엔드 부트캠프 (12)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • useEffect
  • 고차함수
  • 구조분해할당
  • 부트캠프준비
  • HTML
  • 회고
  • CSS
  • 프리코드캠프
  • 코드스테이츠
  • 프론트엔드
  • Next.js
  • 프로그래머스
  • react
  • 알고리즘
  • codestates
  • RTK
  • 유데미
  • 번역
  • JavaScript
  • 부트캠프

최근 댓글

최근 글

hELLO · Designed By 정상우.
JeanneLee57
[자료구조] 배열, 연결리스트
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.