[ 개발 잡소리 ] Queue, Stack
Queue, Stack 이 뭘까
알고리즘문제를 풀어봤거나 관심이 있다면 알고 있을 것이다
일단 값을 넣고 넣은값들을 다시 빼내는 것이 주목적으로 쓰이는 놈들이고
Push, Pop과 같은 전용 메서드들 을 통해 관리한다
따라서 큐와 스택은 배열의 일종의 자료 형태라고 볼 수 있는데
배열과 다른점이 나름의 규칙이 존재한다
그것은 선입선출(FIFO)과 선입후출(FILO)의 개념인데
선입선출은 먼저 들어온놈이 먼저 나가는 순서를 가진다는 의미이다
(First in First out)
선입선출의 데이터 흐름은 규칙에 따라
이런 식으로 들어가고 빠져나간다
먼저 들어온 0이라는 값이 값을 뺄 때 먼저 나간다는 뜻이다.
이러한 형태의 흐름을 가지는 것이Queue이다
일반적인 순서 대기열을 생각하면 된다
선입후출은 먼저들어온놈이 아니라 나중에 들어온 놈이 먼저 나가는 순서이다
(First in Last out)
선입후출은 다음과 같이 데이터가 움직인다
먼저 들어온 0은 뒷전으로 미뤄두고
나중에 들어온 놈을 빼내는 형태이다
이 선입후출의 형태를 가지는 것이 Stack이다
어떻게 사용할까?
이러한 Queue와 Stack을 사용하기 위해서는 직접 구현을 하는 방법도 있지만
보통의 메이저한 언어에서는 이것들을 지원한다
C++에서는
#include <queue>
#include <stack>
을 통해 이들을 사용할 수 있고
C#에서는
using System.Collections.Generic;
을 쓰면 Queue와 Stack을 포함한 List, Dictionary등등을 쓸수 있게 된다
(이것들은 나중에 다른 글을 통해 추가로 설명하겠다)
무려 JS에서는 배열에서 자체적으로 Queue와 Stack 을 지원한다
어 그런데 저 push가 뭐길래 Queue를 지원한다는 걸까
이것은 queue와 stack을 규칙에 따른 조작을 위해 만들어진 메서드이다
Queue
Enqueue(value)
- 큐의 맨 뒤에 값을 추가한다 (순서 제일 뒤)
Dequeue()
- 큐의 맨 앞의 값을 제거하고 반환한다 (순서 제일 앞)
Peak()
- 큐의 맨 앞의 값을 반환한다 (순서 제일 앞)
Stack
Push(value)
- 스택의 맨 위에 값을 추가한다 (순서 제일 앞)
Pop()
- 스택의 맨 위의 값을 제거하고 반환한다 (순서 제일 앞)
Peak()
- 스택의 맨 위의 값을 반환한다 (순서 제일 앞)
위의 이름들은 C#에서 사용되는 메서드의 이름이다
다른 언어들마다 표기되는 이름이 다양해서 모두 담기 어렵지만
C#만의 차이점이라면 이들에 IsEmpty()가 존재하지 않고
Count라는 큐나 스택의 길이를 반환해주는 프로퍼티가 존재하여
이것으로 큐나 스택이 비었는지 감지를 해주어야한다는 차이점이 있다.