문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 값
그러나 데이터는 그 자체만으로 어떤 정보를 의미하지는 않고, 분석하고 정리해서 활용해야만 의미를 가진다.
무수한 상황에서 데이터를 효율적으로 다룰 수 있는 방법들
(특히 Stack, Queue, Tree, Graph 이 4가지는 자주사용된다.)
자료구조 대부분이 특정한 상황을 해결하는데 특화되어 있기 때문에, 많은 자료구조와 예시를 알아두면 비슷한 상황을 만났을 때 적합한 자료구조를 빠르고 정확하게 적용해 문제를 해결할 수 있다.
데이터(data)를 순서대로 쌓는 자료구조
스택은 순서대로 쌓여진 펜케이크를 생각하면 된다. 먼저 만들어진 순서대로 밑으로 가지만, 먹히는 순서는 가장 위에있는 팬케이크, 그니까 제일 최근에 들어온 펜케이크부터 사라진다.
즉, 스택의 가장 기본적인 특징은 이러한 제한적 접근(입출력이 하나의 방향으로 이루어짐)에 있다. (스택에 데이터를 넣는 것은 PUSH, 빼내는 것을 POP이라고 한다.)
- 후입선출
- 데이터의 입출력은 무조건 한개씩
- 하나의 입출력 방향
- 저장되는 데이터는 정적이고 유한해야 함.
- 스택의 크기는 제한이 있음(이를 넘어서는 것을 stack overflow라고 함..자바스크립트의 스택 크기는 대략 1mb언더임)
stack은 대표적으로 뒤로가기 앞으로가기의 기능을 구현할 때 사용된다.
- 새로운 페이지에 접속할 때, 현재 페이지를 prev stack에 저장함
- 뒤로가기 버튼을 클릭해 이전 페이지로 갈 때는 현제 페이지를 next stack에 push하고 prev stack에 가장 나중에 보관된 페이지를 현재 페이지로 가져옴
- 앞으로 가기를 누른다면 현재 페이지를 prev stack에 보관하고, next stack의 가장 나중에 저장된 페이지를 가져옴
데이터를 순서대로 줄세우는 자료구조
큐는 일상에서 너무나도 쉽게 접할 수 있는 예시들이 많다. 예를 들면 줄을 서서 제일 먼저 온 사람이 제일 먼저 입장한다거나, 상품을 전시할 때 먼저온 상품을 앞에 전시한다거나.
큐의 특징의 핵심은 선입선출이라는 점이다. 입출력의 방향이 결정되어 있기는 하지만, 두군데로 접근이 가능하며, 데이터를 넣는 것을 Enqueue, 꺼내는 것은 Dequeue라고 한다.
데이터가 입력된 순서대로 처리할 때 주로 사용한다.
- 선입선출
- 데이터 입출력은 무조건 한개씩
- 양방향 데이터 입출력
여러가지 인쇄물을 프린트 할 때, 큐를 사용한다.
컴퓨터 장치들 사이에서 데이터(data)를 주고받을 때, 각 장치 사이에 존재하는 속도의 차이나 시간 차이를 극복하기 위해 임시 기억 장치의 자료구조로 Queue를 사용한다. 이것을 통틀어 버퍼(buffer)라고 한다.
(대부분의 컴퓨터 장치의 이벤트는 처리속도가 불규칙한데, CPU와 같은 이벤트 처리기는 일정한 처리 속도를 가진다. 불규칙적으로 발생한 이벤트를 규칙적 처리를 하기 위해서 버퍼를 사용한다.)