[자료구조] 자료구조

2023. 10. 20. 15:11·CS 지식/[자료구조]

자료구조란?

프로그램에서 사용하기 위한 자료를 기억장치의 공간 내에 저장하는 방법과 저장된 그룹 내에 존재하는 자료 간의 관계, 처리 방법 등을 연구 분석하는 것

선형 구조(Linear Structure)

배열(Array)

선형 리스트(Linear List)

스택(Stack)

큐(Queue)

데크(Deque)

비선형 구조(Non-Linear Structure)

트리(Tree)

그래프(Graph)

자료구조의 활용

정렬(Sort)

검색(Search)

인덱스(Index)

배열(Array)

동일한 자료형의 데이터들이 같은 크기로 나열되어 순서를 갖고 있는 집합

  • 정적인 자료구조
  • 데이터 삭제 시 삭제된 공간이 빈 공간으로 남아있어 메모리의 낭비가 발생함
  • 반복적인 데이터 처리 작업에 적합

선형 리스트(Linear List)

일정한 순서에 의해 나열된 자료구조

  • 연속 리스트(Contiguous List)
    • 배열과 같이 연속되는 기억장소에 저장되는 자료구조
    • 빈 공간이 있어야 삽입/삭제 시 자료의 이동이 필요

  • 연결 리스트(Linked List)
    • 자료들을 반드시 연속적으로 배열시키지 않고, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료 구조
    • 노드의 삽입/삭제 작업이 용이

스택(Stack)

리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료 구조

  • 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO : Last In First Out) 방식으로 자료 처리
  • 스택의 모든 공간이 꽉 채워져 있는 상태에서 데이터 삽입 → 오버플로(Overflow) 발생
  • 더 이상 삭제할 데이터가 없는 상태에서 데이터를 삭제 → 언더플로(Underflow) 발생

  • TOP : 가장 마지막으로 삽입된 자료가 기억된 위치를 가리키는 요소
  • Bottom : 스택의 가장 밑바닥

큐(Queue)

리스트의 한쪽에서는 삽입 작업이 이루어지고 다른 한쪽에서는 삭제 작업이 이루어지도록 구성한 자료 구조

  • 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO : First In First Out)방식으로 처리
  • 시작과 끝을 표시하는 두 개의 포인터가 있음 
    • 프런트(F, Front) 포인터
      • 가장 먼저 삽입된 자료의 기억 공간을 가리키는 포인터
    • 리어(R, Rear) 포인터
      • 가장 마지막에 삽입된 자료가 위치한 기억 공간을 가리키는 포인터로 삽입 작업을 할 때 사용
  • 운영체제의 작업 스케줄링에 사용

데크(Deque)

삽입과 삭제가 리스트의 양쪽 끝에서 모두 발생할 수 있는 자료구조

  • Stack과 Queue의 장점만 따서 구성한 것

트리(Tree)

정점(Node)과 선분(Branch)을 이용하여 사이클을 이루지 않도록 구성한 그래프의 특수한 형태

  • 하나의 기억 공간 → 노드(Node)
  • 노드와 노드를 연결하는 선 → 링크(Link)

  • 노드(Node) : 트리의 기본 요소, 가지를 합친 것
    • ex) A, B, C, D, E, F, G, H, I, J, K, L, M
  • 근 노드(Root Node) : 트리의 맨 위에 있는 노드
    • ex) A
  • 디그리(Degree, 차수) : 각 노드에서 뻗어 나온 가지의 수
    • ex) A = 3, B = 2, C = 1, D = 3
  • 단말 노드(Terminal Node) = 잎 노드(Leaf Node) : 자식이 하나도 없는 노드, 즉 디그리 0인 노드
    • ex) K, L, F, G, M, I, J
  • 자식 노드(Son Node) : 어떤 노드에 연결된 다음 레벨의 노드들
    • ex) D의 자식 노드 : H, I, J
  • 부모 노드(Parent Node) : 어떤 노드에 연결된 이전 레벨의 노드들
    • ex) E, F의 부모 노드 : B
  • 형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들
    • ex) H의 형제 노드 : I, J
  • 트리의 디그리 : 노드들의 디그리 중에서 가장 많은 수
    • ex) 노드 A나 D가 3개의 디그리를 가지므로 앞 트리의 디그리는 3

그래프(Graph)

그래프 G는 정점 V와 간선 E의 두 집합

  • 간선의 방향성 유무에 따라 방향 그래프와 무방향 그래프로 구분
  • 트리(Tree)는 사이클이 없는 그래프(Graph)

  • n개의 정점으로 구성된 무방향 그래프의 최대 간선 수 → n(n-1)/2
  • n개의 정점으로 구성된 방향 그래프의 최대 간선 수 → n(n-1)

정점이 4개인 경우

→ 무방향 그래프의 최대 간선 수 : 4(4-1)/2 = 6

→ 방향 그래프의 최대 간선 후 : 4(4-1) = 12

    •  
저작자표시 비영리 변경금지 (새창열림)

'CS 지식 > [자료구조]' 카테고리의 다른 글

[자료구조] 제네릭(generic)  (0) 2023.10.20
[자료구조] 빅오 표기법(big-O notation)  (1) 2023.10.20
[자료구조] HashMap  (0) 2023.08.01
[자료구조] 해시(Hash)  (0) 2023.07.19
[자료구조] 이진 탐색 트리(Binary Search Tree)  (0) 2023.07.19
'CS 지식/[자료구조]' 카테고리의 다른 글
  • [자료구조] 제네릭(generic)
  • [자료구조] 빅오 표기법(big-O notation)
  • [자료구조] HashMap
  • [자료구조] 해시(Hash)
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    리눅스
    플러터
    postgresql
    CS
    programmers
    스프링 부트 쇼핑몰 프로젝트 with JPA
    리눅스마스터
    DB
    Flutter
    spring
    springboot
    JPA
    Spring Security
    데이터베이스
    python
    Linux
    데이터
    Java
    백준
    스프링
    프로그래머스
    backjoon
    pcce 기출문제
    baekjoon
    시큐리티
    리눅스마스터 1급
    자바
    Oracle
    스프링부트
    CS지식
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[자료구조] 자료구조
상단으로

티스토리툴바