본문 바로가기
TIL

본 캠프 23일차 TIL

by Data 학습자 2024. 7. 16.

자료 구조

 1. Array (배열)

  • 동일한 타입의 데이터들을 저장하며 고정된 크기를 가지고 있다.
  • 인덱싱 되어 있어 인덱스 번호로 데이터에 접근 할 수 있다.

평가: 가장 기본적인 자료 구조형으로, 고정된 크기의 연속된 메모리 블록에 데이터를 저장합니다. 인덱스를 통해 빠르게 접근할 수 있습니다.

 

비유: 박스 안에 물건을 하나씩 차례로 넣고, 인덱스라는 번호를 통해 원하는 물건을 빠르게 꺼내 사용할 수 있는 서랍장과 같

 

  배열명 > A  → 1, 2, 3  < 원소 값

                           0 1 2  < 인덱스

  배열의 크기 > 3  ┘

 

 2. Linked List (연결 리스트)

  • 각 데이터의 시퀀스가 순서로 연결되어 있는 구조
  • 동적인 데이터 추가 및 삭제에 유리하다.

평가: 동적으로 크기를 조절할 수 있는 자료 구조형으로, 각 노드가 다음 노드를 가리키는 포인터를 포함합니다. 삽입과 삭제가 용이합니다.

 

비유: 철사로 이어진 구슬 목걸이. 구슬 하나를 빼거나 추가할 때 다른 구슬들을 모두 옮길 필요 없이 연결된 철사만 수정하면 됩니다.

 

     head   →   key , next    →    key , next   →    key , next  →  NULL

head┘           └  node ┘     └ 다음 노드 포인터 └   Tail   ┘

 

 3. 스택 (Stack)

  • 후입선출(LIFO, Last In First Out) 구조로, 마지막에 삽입된 요소가 가장 먼저 제거됩니다.
  • 한쪽 끝에서만 삽입과 삭제가 가능합니다.

평가: 데이터의 순서를 역으로 저장하거나, 임시 저장 공간이 필요한 경우에 유용합니다.

 

비유: 접시를 쌓아두는 것과 같아서, 가장 위에 있는 접시를 먼저 꺼내야 합니다.

┏━┓
┃ 3 ┃ <- Top "가장 최근에 삽입된 요소이자 가장 먼저 처리되는 요소"
┣━┫
┃ 2 ┃ <- 원소값
┣━┫
┃ 1 ┃ <- Bottom Bottom "가장 먼저 삽입된 요소"
┗━┛

 4. Queue(큐)

  • 선입선출(FIFO, First In First Out) 구조로, 먼저 삽입된 요소가 가장 먼저 제거됩니다.
  • 한쪽 끝에서 삽입, 다른 쪽 끝에서 삭제가 이루어집니다.

평가: 데이터가 입력된 순서대로 처리되어야 하는 경우에 적합합니다.

 

비유: 줄 서서 기다리는 상황. 먼저 줄을 선 사람이 먼저 서비스를 받습니다.

 

┌──┐
│  1  │  <- Front "가장 먼저 삽입된 요소이자 가장 먼저 처리되는 요소"
├──┤
│  2  │
├──┤
│  3  │  <- Rear "가장 최근에 삽입된 요소"
└──┘

 

5. Hash Table(해시 테이블)

  • 키-값 쌍을 저장하는 자료 구조형으로, 해시 함수를 통해 키를 인덱스로 변환하여 저장합니다.
  • 평균적으로 빠른 검색, 삽입, 삭제가 가능합니다.

평가:

  • 빠른 검색과 삽입, 삭제가 필요할 때 유용하지만, 충돌 관리가 필요합니다. 간단하게 해시 테이블을 이해를 해보자면 딕셔너리의 형태를 생각하며 접근해보면 이해하기 쉽습니다.

비유:

  • 책의 색인(index)처럼 특정 단어를 빠르게 찾을 수 있게 해줍니다. 책의 색인 페이지에서 단어를 찾고, 해당 페이지로 바로 이동할 수 있습니다. 다만 난수와 같아서 데이터의 크기가 커질수록 충돌이 발생할 가능성이 증가하며, 이를 관리하기 위한 추가적인 기법이 필요합니다.

┏━-━━┓
┃키1:값1┃  <- 해시 함수(키의 값)으로 인덱스 결정
┃키2:값2┃
┃키3:값3┃
┃키4:값4┃
┗━━-━┛

 

 6. Tree(트리)

  •  계층적 자료 구조로, 루트 노드에서 시작하여 자식 노드로 확장됩니다. 각 노드는 여러 자식 노드를 가질 수 있습니다.

평가:

  • 계층적 데이터를 저장하고 검색하는 데 적합합니다.

비유:

  • 가계도와 같아서, 루트에 해당하는 조상으로부터 각 자손 노드까지 연결된 구조입니다. 그리고 카테고리 안의 상세 카테고리와도 같은 구조입니다.

             A          <- Root  "최상위 노드"
           / │ \
        B  C   D     <- parent "부모 노드"

       /     │     \
     E      F      G  <- child "자식 노드"

 

7. Binary Tree(이진 트리)

  • 각 노드가 최대 두 개의 자식 노드를 가지는 트리 구조입니다.

평가:

  • 검색, 삽입, 삭제가 효율적이며, 이진 탐색 트리(BST)는 정렬된 형태로 데이터 저장에 유리합니다.

비유:

  • 예/아니오 같은 질문(양자택일)을 통해 원하는 답에 도달하는 구조입니다.

             A         <- Root  "최상위 노드"
           /    \
         B      C    <- parent "부모 노드"

        /  \        \
     D    E       F   <- child "자식 노드"

 

8. Heap(힙)

  • 완전 이진 트리로, 부모 노드가 자식 노드보다 항상 크거나(최대 힙) 작습니다(최소 힙).

평가:

  • 우선순위 큐 구현에 유용하며, 최댓값 또는 최솟값을 빠르게 찾을 수 있습니다.

비유:

  • 최댓값 또는 최솟값을 빠르게 찾을 수 있는 일종의 정렬된 스택. 데의터의 가장 중요한 항목이 항상 맨 위에 있습니다.

           9              <- Root  "최상위 노드"

         /    \

      5        8         <- parent "부모 노드"

    /   \      /   \

  1     3   2    4     <- child "자식 노드"


그래프의 자료 구조형도 있지만 지금의 내가 정리하기엔 너무 어려운 자료 구조형인 것 같다.

'TIL' 카테고리의 다른 글

본 캠프 25일차 TIL  (1) 2024.07.19
본 캠프 24일차 TIL  (0) 2024.07.17
본 캠프 22일차 TIL  (3) 2024.07.15
본 캠프 21일차 TIL  (0) 2024.07.14
본 캠프 20일차 TIL  (0) 2024.07.13