본문 바로가기

CS/자료구조

[자료구조] 자료구조의 의미, 특징, 분류

 

자료구조(Data Structure)?

자료구조를 직역하면 데이터 구조이며, 이를 풀어서 설명하면 '일련의 일정 타입들의 데이터 값의 모임 또는 관계'이다.

각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분해서 표현한 것.

 

자료구조를 사용하는 목적은?

적은 양의 데이트를 처리할 때는 어떤 자료구조를 사용하든 큰 차이가 없지만, 대량의 데이터를 처리할 경우에는 어떤 자료구조를 사용하는지가 효율성에 큰 영향을 준다. 자료를 더 효율적으로 저장, 관리하여 메모리를 절약하고 실행시간을 단축하기 위해 적절한 자료구조를 사용해야한다.

 

→ 예를 들어 책장에 책을 제목별 혹은 분야별로 정리하면 원하는 책을 쉽게 찾을 수 있는 것처럼 메모리를 효율적으로 사용하기 위해 필요한 것이 자료구조이다.

 

 

자료구조의 특징

1. 효율성

목적에 맞는 자료구조를 사용하는 것이 효율이 증가한다.

 

2. 추상화

추상화란 복잡한 자료, 모듈, 시스템 등으로 부터 핵심적인 개념만 간추려 내는 것이다.

공통적인 개념을 이용하여 같은 종류의 다양한 객체를 정의하는 것이다.

자료구조를 이용해서 데이터를 처리할 때는 데이터를 '어떻게' 삽입, 추출, 사용하는지를 구현하는 알고리즘이 아니라, '어느 시점'에 데이트를 삽입, 추출, 사용할 것인지에 초점을 둔다. 추상화된 개념만 알고 있으면 되기 때문에 언어에 종속적이지 않다는 특징이 있다.

 

3. 재사용성

자료구조를 설계할 때, 특정 프로그램에서만 동작하도록 설계하지 않는다. 다양한 프로그램에서 동작할 수 있도록 범용성 있게 설계하기 때문에 여러 프로젝트에서 사용할 수 있다.

 

 

자료구조의 분류

Primitive Data structure

자료를 구성하는 가장 기본적인 단위이다.

  • Integer (정수형)
    수학의 ‘정수’에 해당하는 단위이다. 단, 수학에서 다루는 ‘정수’ 범위와 달리 유한한 범위를 갖는다.
  • Float (실수)
    수학의 ‘실수’에 해당하는 단위이다. 유리수와 무리수가 포함되며 컴퓨터에서는 표현 범위가 한정적이므로 정확한 소수점 아래 값을 나타낼 수 없다. 따라서 소수점 몇 번째 자리까지 정확히 나타낼 수 있는지가 실수형의 범위가 된다.
  • Character (문자)
    하나의 문자를 뜻한다. 띄어쓰기, tab, enter와 같은 공백문자(white space)도 포함한다.
  • Pointer (포인터)
    포인터는 정수, 실수, 문자처럼 그 자체로 의미있는 값을 갖지 않는다.
    대신에 자료형이 메모리 내에서 저장된 곳(메모리 내의 주소)를 통해 자료형의 실제 값을 불러낼 수 있다.

 


NonPrimitive Data Structure

주로 Primitive Data Structure를 응용한 자료구조이다.

  • Arrays (배열)
    자료형을 원소로 취급해 나열한 것으로, 원소번호인 인덱스(index)를 통해 빠른 접근이 가능하다. 갯수(크기)가 정해져 있다.

 

  • Lists (리스트)
    하나의 자료가 다른 자료를 가리키며 자료들을 축적해나가는 구조입니다.
    갯수가 정해져 있지 않아, 배열에 비해 불필요한 빈 공간을 낭비하지 않는 특징이 있다.
    단, 인덱스(index)가 없기 때문에 배열과 달리 한 번에 접근하기가 어렵다.

    - Linear Lists (선형 자료구조) : 순서를 갖는 자료구조

  • Stack (스택)
    LIFO(Last In First Out)형식의 구조로, 맨 마지막에 들어간 자료가 가장 먼저 연산 대상이 된다.
  • Queue (큐)
    FIFO(First In First Out) 형식을 갖는 구조, 맨 처음에 들어간 자료가 가장 먼저 연산 대상이 된다.

    - Non Linear Lists (비선형 자료구조) : 순서가 정해져 있지 않은 자료구조

  • Graph (그래프)
    그래프는 주로 자료와 자료사이의 관계를 나타낼 때 사용하며, vertex(점) V와 edge(모서리) E로 구성된 집합이다.
    방향성을 갖는 방향 그래프와 무방향 그래프로 나뉜다.
  • Tree (트리)
    트리는 주로 파일 구조와 같이 자료와 자료 사이의 종속 관계를 나타낼 때에 사용한다.
    하나 이상의 Node(노드)로 이루어진 유한 집합이다. 노드란, 어떤 자료를 저장하면서 다른 노드로 뻗어나가는 가지를 말한다.

 

  • Files (파일)
    파일은 자료를 HDD(하드디스크) 또는 2차 저장소에 저장할 때에 사용한다.
    파일은 파일명 (filename) 그리고 구분자 (.) 그리고 파일에 맞는 확장자 (dat, txt, png 등등…)로 나뉜다.

 

 

 

참고 자료

https://lizable.github.io/datastructure/Introductions-to-data-structure/#