본문 바로가기
개념/자료구조

[Java] 큐(Queue)

by hs_seo 2016. 6. 10.

자료구조에서 큐는 FIFO(First In First Out) 구조의 자료이다.

처음 들어간 데이터를 출력한다.


구현방식에 따라 다양한 종류가 존재한다.


자바의 util 에는 기본적으로 큐를 제공하기 때문에 해당 부분을 이용하면 된다.

ArrayDeque 를 이용하면 되는데 주의할 점이 하나 있다.


* 데이터를 입력하는 방법에 offer(), push() 두가지 메소드가 있는데

  push는 데이터를 앞으로 입력하고, offer는 데이터를 뒤로 입력한다.

  push 만을 이용하여 데이터를 입력하면 스택처럼 동작하고, offer 만을 이용하여 데이터를 입력하면 큐로 동작한다.

  따라서 데이터를 입력할 때 메소드를 잘 선택하여 입력해야 한다.


import java.util.ArrayDeque;

public class QueueExample {

    public static void main(String[] args) {
       
        System.out.println("-------------[offer]--------------");
        // offer를 이용한 데이터 입력
        ArrayDeque<Integer> deque = new ArrayDeque<>();
        deque.offer(5);
        printDeque(deque);
        deque.offer(4);
        printDeque(deque);
        deque.offer(3);
        printDeque(deque);
        deque.offer(2);
        printDeque(deque);
        deque.offer(1);
        printDeque(deque);
       
        // 데이터 출력
        System.out.println("");
        System.out.println(deque.poll());
        System.out.println(deque.pop());
        System.out.println(deque.poll());
        System.out.println(deque.pop());
        System.out.println(deque.poll());
       
        deque.clear();
        System.out.println("-------------[push]--------------");
       
        // push 를 이용한 데이터 입력
        deque.push(5);
        printDeque(deque);
        deque.push(4);
        printDeque(deque);
        deque.push(3);
        printDeque(deque);
        deque.push(2);
        printDeque(deque);
        deque.push(1);
        printDeque(deque);
       
        // 데이터 출력
        System.out.println("");
        System.out.println(deque.poll());
        System.out.println(deque.pop());
        System.out.println(deque.poll());
        System.out.println(deque.pop());
        System.out.println(deque.poll());
       
        deque.clear();
        System.out.println("-------------[push & offer]--------------");
       
        // push와 offer 를 이용한 데이터 입력
        // push는 앞으로, offer 는 뒤로 데이터 입력
        deque.push(5);
        printDeque(deque);
        deque.offer(4);
        printDeque(deque);
        deque.push(3);
        printDeque(deque);
        deque.offer(2);
        printDeque(deque);
        deque.push(1);
        printDeque(deque);
       
        // 데이터 출력
        System.out.println("");
        System.out.println(deque.poll());
        System.out.println(deque.pop());
        System.out.println(deque.poll());
        System.out.println(deque.pop());
        System.out.println(deque.poll());
       
    }
   
    // 큐 출력
    public static void printDeque(ArrayDeque<Integer> deque) {
       
        for(int i : deque)
            System.out.printf("%d ", i);
       
        System.out.println();
    }
}



<결과>

-------------[offer]--------------
5
5 4
5 4 3
5 4 3 2
5 4 3 2 1

5
4
3
2
1
-------------[push]--------------
5
4 5
3 4 5
2 3 4 5
1 2 3 4 5

1
2
3
4
5
-------------[push & offer]--------------
5
5 4
3 5 4
3 5 4 2
1 3 5 4 2

1
3
5
4
2


반응형

'개념 > 자료구조' 카테고리의 다른 글

[JAVA] 스택(Stack)  (3) 2016.06.10
[자료구조] 힙과 힙소트  (0) 2015.06.08
[자료구조] 배열과 링크드 리스트  (0) 2015.06.04