
큐(queue)도 스택과 같이 임시 데이터를 처리할 때 효과적인 데이터 구조다. 큐에서는 데이터를 처리하는 순서만 다르고 많은 면에서 스택과 비슷하다.
큐는 스택과 달리 큐에 첫 번째로 추가된 항목이 가장 먼저 제거된다. 그래서 큐의 연산 연산을 묘사할 때 First In, First Out의 약자인 "FIFO"로 표현한다.
스택과 유사하게 큐도 다음과 같은 세 가지 제약을 갖는다.
데이터는 큐의 끝에만 삽입할 수 있다.
데이터는 큐의 앞에서만 삭제할 수 있다.
큐의 앞에 있는 원소만 읽을 수 있다.
큐를 밑의 그림으로 어떻게 동작하는지 보자.
먼저 6을 삽입한다.

다음으로 8을 삽입한다.

다음으로 20을 삽입한다.

이제 큐의 삭제를 보자. 큐는 앞에서부터 데이터를 삭제한다. 스택의 역순이다. (큐에서 원소를 삭제하는 것을 디큐(dequeue)라고도 부른다)
6에서부터 삭제를 시작한다.

8을 삭제한다.

큐에는 원소 20 하나가 남는다.
다음은 자바로 구현해본 큐다.
int front = 0;
int back = 0;
int[] queue = new int[100];
//큐에 값이 들어있는지 확인하는 메서드
public boolean isEmpty() {
return front == back;
}
//큐가 가득 찼는지 확인하는 메서드
public boolean isFull() {
if(back == 99)
return true;
else
return false;
}
// 값 푸시
public void enqueue( int value ) {
if(isFull()) {
System.out.println("큐가 가득 찼습니다");
return;
}
queue[back++] = value;
}
// 값 삭제
public int dequeue() {
if(isEmpty()) {
System.out.println("큐가 비었습니다");
return -1;
}
return queue[front++];
}
// 값 확인하기
public int pick() {
if(isEmpty()) {
System.out.println("큐가 비었습니다.");
return -1;
}
return queue[front];
}
큐는 요청받은 순서대로 처리하므로 비동기식 요청을 처리하는 완벽한 도구이기도 하다.
또한, 큐는 정해진 순서대로 이벤트가 발생해야 하는 시나리오에서 흔하게 쓰인다.