Queue

이용만·2023년 3월 16일
0


톨게이트를 Queue 자료 구조, 자동차는 데이터로 비유한다.
톨게이트에 가장 먼저 진입한 자동차가 가장 먼저 톨게이트를 통과하고
가장 나중에 진입한 자동차는 먼저 도착한 자동차가 모두 빠져나가기 전엔 빠져나갈 수 없다.

  • Queue의 구조
    FIFO : 먼저 들어간 데이터가 먼저 나온다.
    LILO : 맨 마지막에 들어간 데이터는 맨 마지막에 나온다.

enqueue : Queue에 데이터를 넣는 것
dequeue : Queue에 데이터를 꺼내는 것

👉Queue는 데이터가 입력된 순서대로 처리할 때 주로 사용된다.

  1. 먼저 들어간 데이터가 제일 처음에 나오는 구조이다.
public class stackEx {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1);
        queue.add(2);
        queue.add(3);
        queue.add(4);

        System.out.println(queue.poll()); // 1
    }
}
  1. 데이터는 하나씩 넣고 뺀다. 여러개를 넣고 뺄 수 없다는 말이다.

3.두 개의 입출력 방향을 가지고 있다.
Stack 구조는 입출력 방향이 같지만 Queue는 입력,출력 방향이 다르다.


->Queue의 실사용의 예로 프린터가 있을 것이다.
컴퓨터 장치들 사이에서 데이터를 주고 받을 때, 속도차이, 시간차이를 극복하기 위해 임시 기억 장치의 자료 구조로 Queue를 사용한다. 이를 버퍼(buffer)라고 하고 버퍼는 불규칙적으로 발생한 이벤트를 규칙적으로 처리하기 위해 사용된다. CPU는 규칙적이지만 다른 장치(프린터)는 불규칙적이다.

컴퓨터와 프린터 사이의 데이터(data) 통신

  • 일반적으로 프린터는 속도가 느립니다.
  • CPU는 프린터와 비교하여, 데이터를 처리하는 속도가 빠릅니다.
  • 따라서, CPU는 빠른 속도로 인쇄에 필요한 데이터(data)를 만든 다음, 인쇄 작업 Queue에 저장하고 다른 작업을 수행합니다.
  • 프린터는 인쇄 작업 Queue에서 데이터(data)를 받아 일정한 속도로 인쇄합니다.

자바 ArrayList로 Queue를 사용해보자.

ArrayQueue queue = new ArrayQueue(5)

queue.add(1); // [1]
queue.add(2); // [1, 2]
queue.add(3); // [1, 2, 3]
queue.add(4); // [1, 2, 3, 4]
queue.add(5); // [1, 2, 3, 4, 5]

System.out.println(queue.show()); // [1, 2, 3, 4, 5]

queue.pull(); // [2, 3, 4, 5]
queue.pull(); // [3, 4, 5]

System.out.println(queue.show()); // [3, 4, 5];
  • ArrayList로 Queue를 사용할 때 add, pull 이외에 필요한 메서드를 어떻게 구현할 수 있는가?
    size()를 통해 길이도 구할 수 있고 peek 메서드는 list 메서드의 get 메서드를 써서 구현할 수 있다.
  • Java의 배열로 Queue를 구현했을때 어떤 단점이 있는가
    배열의 길이는 정해지고 가변적이지 못하기 때문에 정해진 데이터 개수만 들어갈 수 있다는 불편함이 있다.

원형큐

0개의 댓글