[CS] Array/LinkedList

박원준·2025년 9월 13일

🌐

Array(배열)과 LinkedList(연결 리스트)는 서로 다른 특성을 가진 대표적인 자료구조입니다.
면접에서 자주 비교되는 주제이므로, 각 특성과 장단점을 명확히 이해하는 것이 중요합니다.


✅ Array란?

  • 연속된 메모리 공간에 데이터를 저장
  • 인덱스를 통해 빠른 접근(O(1)) 가능
  • 삽입/삭제 시 많은 요소 이동이 필요 → 비효율적(O(n))
  • 캐시 친화적(메모리 연속 배치 → CPU 캐시 효율 ↑)

예: int arr[5] = {1, 2, 3, 4, 5};


✅ LinkedList란?

  • 각 노드가 데이터와 다음 노드의 포인터를 가짐
  • 삽입/삭제는 포인터만 변경하면 되므로 빠름(O(1))
  • 임의 접근(Random Access)은 불가능 → 처음부터 탐색 필요 (O(n))
  • 메모리 연속성이 없어 캐시 효율이 떨어짐

종류:

  • 단일 연결 리스트 (Singly Linked List)
  • 이중 연결 리스트 (Doubly Linked List)
  • 원형 연결 리스트 (Circular Linked List)

🔍 Array vs LinkedList 비교

항목ArrayLinkedList
메모리 구조연속된 메모리비연속, 노드+포인터
접근 속도O(1) (인덱스로 직접 접근)O(n) (순차 탐색 필요)
삽입/삭제O(n) (요소 이동 필요)O(1) (포인터 변경)
메모리 효율효율적포인터 저장으로 오버헤드 발생
캐시 친화도높음낮음
활용 예검색/읽기 위주삽입/삭제 빈번

🧠 추가 CS 지식

🔹 Array의 장점

  • 빠른 인덱스 접근 (Random Access)
  • 캐시 지역성(Locality) 효과 → 성능 향상

🔹 LinkedList의 장점

  • 크기가 가변적 → 삽입/삭제 용이
  • 중간에 데이터 추가/삭제가 많은 경우 유리

🔹 활용

  • Array는 읽기 중심(검색, 인덱스 접근) 작업에서 효율적
  • LinkedList는 삽입/삭제가 빈번한 큐(Queue), 스택(Stack), 그래프의 인접 리스트 표현 등에 자주 사용됨

🔹 변형 자료구조

  • 동적 배열 (Dynamic Array, 예: C++ vector, Java ArrayList): 배열 기반 + 크기 자동 확장
  • 해시 테이블 (Hash Table): 내부적으로 배열과 연결 리스트를 결합해 충돌 해결에 활용

🔹 빅오(Big-O) 복습

  • Array: 접근 O(1), 삽입/삭제 O(n)
  • LinkedList: 접근 O(n), 삽입/삭제 O(1)

🔹 언어별 활용

  • Java: ArrayList(배열 기반), LinkedList(연결 리스트 기반)
  • Python: list(배열 기반), collections.deque(양방향 연결 리스트 유사 구조)

🎯 면접 대비 질문 예시

💬 Array와 LinkedList의 차이를 설명해주세요.
💬 삽입/삭제가 많은 경우 어떤 자료구조가 유리한가요?
💬 캐시 친화성(Cache Locality)은 왜 배열이 더 좋은가요?
💬 ArrayList와 LinkedList의 차이를 설명해보세요.
💬 해시 테이블에서 배열과 연결 리스트는 각각 어떤 역할을 하나요?
💬 Python의 list는 배열일까요, 연결 리스트일까요?

0개의 댓글