Data Structure, 즉 자료구조는 말 그대로 데이터의 구조를 말한다.
우리가 흔히 쓰는 여러가지 컴퓨터 프로그램은 자료구조와 알고리즘의 결합체라고 볼 수 있다. 알고리즘이 특정 문제를 어떻게 풀어야 하는지에 관한 것이라면, 자료구조는 무엇을 풀어야 하는지와 관련되어 있다고 할 수 있다.
Data는 크게 Atomic Data, Composite Data로 분류할 수 있다.
Atomic Data는 Atomic(원자의)라는 이름과 걸맞게 더이상 쪼갤 수 없는 데이터를 말한다. 2475와 같은 정수값이 그 한 예시라고 할 수 있다.
Composite Data는 역시 Composite(합성의)라는 이름에 걸맞게 의미의 단위로 쪼갤 수 있는 데이터를 말한다. 02-0000-0000와 같은 전화번호를 Composite Data라고 할 수 있다. 우리나라에서는 지역에 따라 다른 국번을 사용하고 있다.
우리는 흔히 데이터라고 하면 2475와 같은 숫자, 혹은 "서울시"와 같은 문자 등 데이터의 값(Values)만 생각한다. 하지만, 데이터의 타입은 그 데이터 값들에 적용할 수 있는 연산(Operations)까지 포함한 개념이다. 예를 들어, 정수형(integer) 데이터라고 한다면 "...., -2, -1, 0, 1, ...."와 같은 정수값 뿐만 아니라 "+,-,/,*,..." 등의 연산까지 포함하는 개념이라는 것이다.
Data Structure란, 특정 관계에 놓인 데이터의 집합을 일컫는다. 여기서 Structure그 데이터를 이루는 관계의 집합을 의미하므로, 데이터와 더불어 이에 적용할 수 있는 연산까지 포함하는 폭넓은 개념이라고 할 수 있다. 어떤 문제를 푸는 데에 있어, 유용한 자료구조가 존재한다. 즉, 문제를 풀이함에 있어 어떤 방식으로 문제를 풀이할지(알고리즘)에 못지 않게 어떤 구조의 데이터로 문제를 풀이할지(자료구조)도 중요하다는 것이다.
자료구조는 크게 이렇게 나눌 수 있다. 선형 형태의 리스트로 이루어진 자료구조와, 선형의 모양이 아닌 형태의 리스트로 이루어진 자료구조가 있다. 선형 리스트 중 General list라고 함은, 데이터의 추가와 삭제의 위치가 자유로운 리스트를 말한다. 반대로 Restricted list는 데이터의 추가와 삭제의 위치가 한정되어 있다.
Node는, 여러 자료구조에서 쓰이는 요소를 말한다. 노드는 두가지 부분으로 이루어져 있는데, Data와 Link가 그것이다. Data는 말 그대로 Data를 담는 부분이며, Link는 다른 데이터가 존재하는 Node를 가리키는 부분이다. 이러한 Link의 활용에 따라 Linear List이냐, Non-Linear List이냐가 달라지기도 한다.
typedef struct
{
int data;
NODE* link;
}NODE;
C언어로 Node는 구조체를 활용하여 구현한다. data의 자료형은 얼마든지 바뀔 수 있지만, link는 같은 Node를 가리키므로, Node의 포인터의 형태롤 지니고 있다.
이러한 Node를 통해서 여러 자료구조를 구현할 수 있으며, Node를 어떻게 활용하는지에 따라 자료구조가 바뀌기도 한다.