이 영역을 누르면 첫 페이지로 이동
컴01기 블로그의 첫 페이지로 이동

컴01기

페이지 맨 위로 올라가기

컴01기

힝입니다.

기초 데이터 구조 - 연결리스트

  • 2022.10.10 23:47
  • 카테고리 없음

연결리스트(linked list)

동적 메모리에 할당된, 링크에 의해 연결된 유한 개수의 데이터 원소 노드들
  • 연결리스트 명(linked list name), L : 연결리스트의 시작 위치, 즉 첫 노드의 주소
  • 연결리스트 크기(linked list size), n : 연결리스트 내 노드 수

 

동적메모리와 노드

  • 동적메모리(dynamic memory) : 프로그램 실행 시 사용 가능한 주메모리의 한 구역
  • 노드(node) : 한 개의 데이터원소를 저장하기 위해 동적메모리에 할당된 메모리

노드를 위한 메모리의 할당(allocation)과 해제(deallocation)는 실행시간에 시스템 콜에 의해 처리된다.

 

각 시스템콜을 표현하는 의사코드 명령

  • getnode() : 노드를 할당하고 그 노드의 주소를 반환. 만약 동적 메모리가 고갈된 시점이면 null 을 반환.
  • putnode(i) : 주소 i의 노드에 할당되었던 메모리의 사용을 해제하고, 이를 동적 메모리에 반환(메모리 재활용을 위함)

이와 같은 동적메모리 매커니즘을 활용하여, 연결리스트를 여러 가지 형태로 구현할 수 있다.

  • 단일 연결리스트
  • 이중 연결리스트
  • 원형 연결리스트
  • 헤더 및 트레일러 연결리스트
  • 이들의 복합

 

단일 연결리스트(singly linked list)

연속 노드로 구성된 가장 단순한 연결 데이터 구조

 

단일연결리스트의 노드

단일연결리스트의 각 노드가 저장하는 데이터

  • 원소(element) : 데이터 원소
  • 링크(link) : 다음(next) 노드의 주소. 만약 다음 노드가 없다면 널링크(Ø)를 저장

 

단일연결리스트의 접근점

  • 연결리스트 전체에 대한 참조로 사용하는 첫 노드의 주소, 헤드노드(head node)라고도 한다.
  • 그림 3-10 (상) 에서 단일연결리스트에 대한 접근점은 헤드노드의 주소 L이다.
  • 그림 3-10 (하) 에서 초기화되거나 비어있는 단일연결리스트의 헤드노드의 주소 L은 null(Ø)이다.

 

이중연결리스트(doubly linked list)

단일연결리스트의 각 노드에 링크를 하나 더 추가하여, 역방향 순회도 가능하도록 만든 연결리스트

 

이중연결리스트의 노드

 

이중연결리스트의 각 노드가 저장하는 데이터

  • 원소(element) : 데이터 원소
  • 링크(link) : 다음(next) 노드의 주소. 만약 다음 노드가 없다면 널링크(Ø)를 저장
  • 링크(link) : 이전(prev) 노드의 주소. 만약 이전 노드가 없다면 널링크(Ø)를 저장 

 

이중연결리스트의 접근점

  • 헤드노드(head node), Head : 연결리스트 전체에 대한 참조로 사용하는 첫 노드의 주소
  • 테일노드(tail node), Tail : 연결리스트 전체에 대한 참조로 사용하는 마지막 노드의 주소
  • 그림 3-12 (상) 에서 이중연결리스트에 대한 접근점은 헤드노드의 주소 Head 혹은 테일노드의 주소 Tail 이다.
  • 그림 3-12 (하) 에서 초기화되거나 비어있는 이중연결리스트의 Head 와 Tail 값은 모두 null(Ø)이다.

 

원형 연결리스트(circularly linked list)

단일연결리스트의 마지막 노드의 링크에 헤드노드의 주소를 저장하여 만든 연결리스트

 

원형연결리스트의 접근점

  • 헤드노드의 주소, L : 원형연결리스트 전체에 대한 참조로 사용하는 첫 노드의 주소
  • 그림 3-13 (상) 에서 원형연결리스트에 대한 접근점은 헤드노드의 주소 L 이다
  • 그림 3-13 (하) 에서 초기화되거나 비어있는 원형연결리스트의 L 은 null(Ø)이다.

 

헤더와 트레일러

작업의 편의를 위해 추가하는 특별 노드(special node) == 모조 노드 (dummy node)
  • 헤더 노드(header node), H : 헤드노드 바로 앞에 추가하여 사용할 수 있다.
  • 트레일러 노드(trailer node), T : 테일노드 바로 뒤에 추가하여 사용할 수 있다.

해당 노드에는 아무 원소도 저장하지 않아서 특별 노드(special node)라고 불리기도 하고,

실제 데이터 원소가 아닌 모조 원소를 저장하기 때문에 모조 노드(dummy node)라고 불리기도 한다.

 

헤드노드 vs 헤더노드

  • 헤드노드 : 실제 데이터원소를 저장하는 노드
  • 헤더노드 : 실제 데이터원소를 저장하지 않는 특별 노드

 

특별 노드를 사용하는 연결리스트에 대한 접근점

  • 헤더노드의 주소 또는 트레일러의 주소
  • 그림에서 헤더노드의 원소 필드가 흰 바탕으로 표시된 것은, 해당 필드의 값이 없거나 모조라는 의미이다.
  • 그림 3-14 (상) 에서 헤더를 사용한 단일연결리스트에 대한 접근점은 헤더노드의 주소 H 이다
  • 그림 3-14 (하) 에서 초기화되거나 비어 있는, 헤더를 사용한 단일연결리스트의 H 는 null(Ø)이다.

 

그 외의 연결리스트

앞서 제시한 기본형 연결리스트들과 특별 노드를 결합하여, 다양한 형태의 연결리스트들을 구축할 수 있다.
  • 다음 그림들의 (하) 부분은 초기화되거나 비어있는 연결리스트를 나타낸다.

저작자표시 (새창열림)

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

다른 글 더 둘러보기

정보

컴01기 블로그의 첫 페이지로 이동

컴01기

  • 컴01기의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (87)
    • 📰논문 리뷰 (16)
    • 🍒회고록 (4)
    • 🖤네이버 ai tech (0)
    • ✨글쓰는힝 (1)
    • 🔥취준일기 (2)
    • 🎲유니티 (2)
    • 🔨삽질 (10)
    • 📚 서적 리뷰 (4)
    • 🐹알고리즘 (4)
    • 😎정리하는 카테고리 (4)
    • 📝CS 공부 (6)
      • 운영체제 (1)
      • 네트워크 (4)
      • 리팩토링 (1)
    • etc (22)
      • 혼공단 (7)
      • Spring (7)
      • JS (1)
      • OpenCV (2)
      • Unity (5)

최근 글

인기 글

댓글

태그

  • 혼공머신
  • github
  • 회고록
  • unity
  • 혼공단
  • 혼공SQL
  • 백준
  • 혼공학습단

나의 외부 링크

  • Github
  • Youtube

정보

힝님의 컴01기

컴01기

힝님

방문자

  • 전체 방문자
  • 오늘
  • 어제

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 힝님. Designed by Fraccino.

티스토리툴바