4차산업혁명의 일꾼/개발문답

연결 리스트(Linked List)의 구조와 사용 사례를 설명해주세요.

르무엘 2025. 3. 15. 14:35

연결 리스트(Linked List)의 구조

연결 리스트는 데이터를 노드(Node)라는 단위로 저장하며, 각 노드는 데이터(Data)와 다음 노드를 가리키는 포인터(Next Pointer)를 포함하는 구조입니다. 배열(Array)과 달리 연결 리스트는 메모리상에서 데이터를 연속적으로 저장하지 않고, 동적으로 메모리를 할당받아 노드 간 연결을 유지합니다.

구조

  1. 노드(Node):
  • 데이터(Data): 저장하고자 하는 실제 값.
  • 포인터(Next): 다음 노드를 가리키는 참조값.
  1. 헤드(Head):
  • 연결 리스트의 첫 번째 노드를 가리키는 포인터.
  1. 종류:
  • 단일 연결 리스트(Singly Linked List): 각 노드가 다음 노드만 가리킴.
  • 이중 연결 리스트(Doubly Linked List): 각 노드가 다음 노드와 이전 노드를 가리킴.
  • 원형 연결 리스트(Circular Linked List): 마지막 노드가 첫 번째 노드를 가리켜 원형 형태를 이룸.

연결 리스트의 특징

  • 동적 메모리 할당: 배열과 달리 크기가 고정되지 않으며, 필요에 따라 노드를 추가/삭제할 수 있음.
  • 효율적인 삽입/삭제: 임의의 위치에서 데이터를 삽입하거나 삭제할 때 배열보다 효율적임(Shift 작업이 필요 없음).
  • 랜덤 접근 불가: 특정 인덱스에 접근하려면 순차적으로 노드를 따라가야 함(시간 복잡도: O(n)).

사용 사례

  1. 메모리 관리:
  • 연결 리스트는 동적 자료 구조로, 메모리를 유연하게 사용해야 하는 경우 적합합니다.
  • 예: 운영체제(OS)의 프로세스 관리(프로세스가 동적으로 생성되고 종료됨).
  1. 데이터 삽입/삭제가 빈번한 프로그램:
  • 특정 데이터의 삽입/삭제가 중요하지만, 검색 속도는 큰 문제가 되지 않는 경우 사용.
  • 예: 컴파일러의 심볼 테이블.
  1. 스택과 큐 구현:
  • 연결 리스트를 이용해 스택(Last In First Out) 또는 큐(First In First Out) 구조를 구현하면, 크기 제약 없이 유연하게 동작 가능.
  1. 그래프(Graph) 표현:
  • 그래프의 인접 리스트를 표현할 때 연결 리스트를 사용.
  • 예: 소셜 네트워크에서 사용자 간 친구 관계를 나타냄.
  1. LRU 캐시(LRU Cache):
  • 가장 최근에 사용되지 않은 데이터를 삭제하고 새 데이터를 추가하는 캐시 시스템에서 활용됩니다.
  1. 멀티미디어 플레이어:
  • 음악 및 동영상 재생 목록(next/previous)에서 순차적으로 데이터를 처리하기 위해 사용.

장점

  • 크기가 고정되지 않아 유연성이 높음.
  • 데이터 삽입/삭제가 배열에 비해 효율적임(중간 삽입/삭제 시).

단점

  • 포인터를 저장하기 위한 추가 메모리 공간이 필요함.
  • 특정 데이터에 접근하기 위해 노드를 순차적으로 따라가야 하므로, 검색 속도가 느림.

정리: 연결 리스트는 데이터를 유동적으로 저장할 수 있고, 삽입/삭제 작업이 빈번한 경우에 특히 유용한 자료 구조입니다.

LIST