큐도 스택과 마찬가지로 임시 데이터를 처리하기 위해 디자인된 데이터 구조다.
데이터를 처리하는 순서만 제외하면 많은 면에서 스택과 비슷하다.
스택처럼 큐도 추상 데이터 타입이다.
선착순을 QUEUE라고 볼 수 있다.(실제 대기열을 Queue라고 한다)
먼저 도착한 사람이, 먼저 행동하게 된다
이는 FirstInFirstOut FIFO로 표현한다.
스택이 세로로 된 배열로 묘사된다면 스택은 주로 가로로 묘사된다.
또한 흔히 큐의 앞을 front 큐의 끝을 back이라 부른다.
스택과 마찬가지로 큐도 세 가지 제약을 갖지만 제약 사항이 조금 다르다.
큐에 값을 삽입할 때에는 enqueue, 값을 제거할때에는 dequeue라 부른다.
출력부터 웹 어플리케이션의 백그라운드 워커에 이르기까지 많은 앱에서 흔하게 큐를 사용한다.
프린터가 네트워크상에 있는 여러 컴퓨터로부터 출력 잡을 받아, 요청받은 순서대로 각 문서를 출력하는 기능을 구현해보자
class PrintQueue {
constructor() {
this.queue = [];
}
enqueue(item) {
this.queue.push(item);
}
dequeue() {
return this.queue.shift();
}
isEmpty() {
return this.queue.length === 0;
}
size() {
return this.queue.length;
}
}
모던 자바스크립트에서의 배열은 해시에 가깝기 때문에 배열을 사용하여 큐를 구현하였다.
다음은 실 생활에서 스택과 큐 자료구조를 언제 사용할지 선택에 도움을 줄 수 있는 예시다.
큐를 사용한다. 전화를 건 사람이 복수일 수 있으므로 전화를 건 사람을 큐에 저장시키고 FIFO를 적용하여 한명씩 상담원에게 연결한다.
스택은4 큐는3을 읽는다. 큐는 Front의 값만, 스택의 Top의 값만 읽을 수 있다.
function reverseWord(word){
const stack = [];
let newString = '';
for(let i = 0; i < word.length ; i++) {
stack.push(word[i]);
}
for(let i = 0; i < word.length; i++){
newString += stack.pop();
}
return newString;
}
reverseWord('안녕하세요?') // ?요세하녕안