본문 바로가기

자료구조

[큐] What's Queue? (In JAVA)

Queue란 무엇일까?

- in JAVA -


이번 포스팅은 자료구조하면 빠질 수 없는 자료구조의 핵심 개념 중 하나인 큐(Queue)에 관한 내용이다.

큐는 스택과 함께 자료구조라는 과목 내에서 안방마님과 같은 존재들인데 스택과 큐는 반대되는 성질을 가진다.


스택은 후입선출(LIFO)구조였다면 큐는 선입선출(FIFO : First In First Out)구조이다.


<큐 (Queue) 의 삽입 >


큐는 양쪽이 뚫려있는 통이라고 생각하면 이해하기 훨씬 쉽다.

양쪽이 뚫려있기 때문에 양쪽으로 데이터를 넣고 뺄 수 있는 것이다.

삽입은 스택과 같이 한 방향으로 차곡차곡 넣는다.

하지만 데이터를 삭제할 때, 즉 큐에서 뺄 때 스택과 정반된다.


<큐 (Queue) 의 삭제>


삭제를 할 때는 삽입했던 방향과 반대 방향에서 삭제를 하게 되어 선입선출 구조가 만들어지게 되는 것이다.


그럼 본격적으로 큐를 코드화한 모습을 살펴보자.

이번 포스팅에서는 자바에서 제공하는 큐 STL을 이용해서 큐를 구현해볼 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.LinkedList;
import java.util.Queue;
 
public class main {
 
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<Integer>();
        
        System.out.println(queue.isEmpty());
        
        queue.offer(100);
        queue.offer(200);
        queue.offer(300);
        
        System.out.println(queue.isEmpty());
        
        System.out.println(queue.peek());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
    }
}
cs



자바에서 큐의 구현 클래스는 총 3가지가 있다.

1. LinkedList

2. priorityQueue

3. priorityBlockingQueue


2, 3번은 우선순위 큐 내용이므로 다음에 다루도록 하겠다.

위 예제는 1번, LinkedList 클래스를 이용한 연결된 큐 구현이므로 큐를 정의할 때에도

Queue<DataType> 변수명 = new LinkedList<DataType>();   이와 같이 정의한 것이다.


큐의 기능에는 대표적으로 데이터값을 큐에 삽입하는 offer(element data);

큐 내에서 가장 먼저 삽입된 값을 참조하는 peek();

큐에서 맨 앞 요소를 꺼내 그 값을 반환하는 poll();

그리고 큐가 비어있는 상태인지 확인하는 isEmpty(); 가 있다.


이렇게 간단하게 큐의 형태와 연결된 큐의 구현에 대해 알아보았다.

자료구조도 프로그래밍과 마찬가지로 반복 학습이 중요하니 직접 구현해보고

이를 응용해서 푸는 문제들도 많이 풀어보자!