데이터 타입이란 하나의 데이터를 어떤 식으로 해석할지 정의한 것이다. 숫자, 문자, Boolean처럼 데이터 타입을 설정함으로 인해 해당 데이터가 메모리에 어떻게 저장되고, 또 어떻게 처리되는지를 구분할 수 있다. 그렇다면 자료구조란 무엇일까? 자료구조(Data Structure)란 이런 여러 데이터들의 묶음을 어떻게 저장하고 사용할지를 정의한 것이다. 자료구조에는 여러 종류가 있는데, 이번 주는 각 자료구조에 대한 개념 및 각 자료구조가 주는 장단점에 대해 알아보려고 한다. 우선 오늘은 그중에서도 가장 간단하다고 할 수 있는 Stack과 Queue에 대해 정리해보려고 한다.
쉽게 생각해서 Stack은 고리 던지기 게임의 논리와 같다. 막대에 먼저 들어간 고리는 가장 밑에 쌓이기 때문에 가장 마지막에 꺼낼 수 있고, 반대로 막대에 가장 마지막에 들어간 고리는 가장 위에 쌓이기 때문에 가장 먼저 꺼낼 수 있다.
위 그림을 보았을 때 storage는 고리가 들어가는 기둥이고, storage에 들어가있는 블록들은 고리라고 볼 수 있다. 가장 먼저 추가된 블록1은 storage의 가장 밑에 쌓이고, 가장 마지막에 추가된 블록4는 가장 위에 쌓이기 때문에, storage에서 블록을 하나 가져오게 된다면 가장 마지막에 추가된 블록4를 가져오게 되는 것이다.
top
: value의 현재 위치를 할당size()
: 스택의 현재 요소 갯수를 반환push()
: 스택의 마지막에 요소를 추가pop()
: 스택의 마지막에 추가된 요소를 제거 후 반환peek()
: 가장 위에 있는 요소를 반환 (제거하지 않고 내용만 확인)empty()
: 스택에 요소가 있는지 여부를 반환Queue는 데이터를 순서대로 실행시키기 위해 사용한다. 우리가 흔히 일상에서 볼 수 있는 정수기 옆 종이컵홀더의 원리와 동일하다고 볼 수 있다. 종이컵을 채울 때에는 위에서 밑으로 채워넣고, 종이컵을 사용할 때에는 가장 먼저 채워진 종이컵부터 사용한다. Queue도 이와 같이 요소를 storage의 가장 뒤에 추가하고, 제거 시 가장 처음에 추가된 요소가 가장 먼저 제거된 후 반환된다.
위 그림처럼 Queue는 enqueue
메서드를 통해 블록을 storage 가장 마지막에 추가하고, dequeue
메서드를 통해 가장 앞에 있던 블록을 storage로부터 제거한다. Queue는 주로 데이터의 우선 순위가 필요한 경우나, 순서대로 처리해야 하는 데이터를 대기시켜 놓는 경우에 많이 사용된다.
front
: 큐의 처음에 저장된 요소 index를 확인rear
: 큐의 마지막에 저장된 요소 index를 확인size()
: 큐의 현재 요소 갯수를 반환enqueue()
: 큐의 마지막에 요소를 추가dequeue()
: 큐의 처음에 있는 요소를 제거하고 반환