코드스테이츠_국비교육/[Section2]

23.03_Queue_22.09.22

생각없이 해도 생각보다 좋다. 2022. 9. 24. 10:07

Queue

>의미

: 대기 행렬. 즉, 데이터가 들어가서 저장되었다가 들어간 순으로 뽑아냄.

: Stack과 반대되는 개념의 자료구조

: 예시) 고속도로 톨게이트(자동차: 데이터)

>사용

enqueue: Queue에 데이터를 넣는 것. (add)

dequeue: Queue에서 데이터를 꺼내는 것. (poll)

>특징

  • 1. FIFO(First In First Out)

: 먼저 들어간 데이터가 제일 처음에 나옴. (선입선출)

  • 2. 데이터는 하나씩 넣고(add) 뺼(poll) 수 있다.

: 한꺼번에 여러개의 데이터를 넣고 뺼 수 없음.

  • 3. 두 개의 입출력 방향이 있다.

: 입력, 출력 방향이 다르다.
: Stack과 다르게 넣은 곳에서 뺄 필요가 없으니.

>실사용 예제

: 게임 큐(Queue) 잡기

: 프린터 인쇄 (문서의 페이지별로 인쇄됨)

>buffer의 개념

: 컴퓨터의 여러 장치에서 발생한 불규칙적인 이벤트를 규칙적으로 처리하기 위해 사용하는 것.

: Queue과 같은 구조로 이벤트를 쌓고, 가장 먼저 들어온 이벤트부터 CPU가 규칙적으로 처리함. 이런 과정을 Buffering이

라고 한다.
>Queue를 사용하기 적합한 상황

  • 1. 데이터 처리 속도가 다른 장치간 사용

: 빠른 처리 속도의 CPU가 인쇄 작업을 미리 Queue에 저장하고 딴 일함.

: 느린 처리 속도의 프린터는 Queue에서 데이터를 받아서 일함.

  • 2. 스트리밍 서비스

: 끊김없이 연속적으로 데이터가 제공되어야함.

: Queue에 데이터를 모으고, 충분히 모인 경우 스트리밍함으로써 끊김없는 서비스를 제공

>메서드

add(): 큐에 데이터를 추가 (같은 역할을 하는 offer()도 존재)

poll(): 가장 먼저 추가된 데이터를 큐에서 삭제하고 삭제한 데이터를 리턴

remove(): 가장 먼저 추가된 데이터를 큐에서 삭제

size(): 큐에 추가된 데이터의 크기를 리턴

peek(): 큐에 가장 먼저 추가된 데이터를 리턴(큐가 비어있으면 null 반환, element()도 같은 비슷한 역할)

show(): 큐에 들어있는 모든 데이터를 String 타입으로 변환하여 리턴

clear(): 큐에 들어있는 모든 데이터를 삭제(Collection 인터페이스의 메서드)

>ArrayList로 Queue 구현해보기

: 0번 인덱스에서 계속 데이터가 삭제되어서 list를 한 칸씩 당기는 작업이 발생. 효율이 안좋을듯..?

: 따로 정리

>공식 문서 뜯어보기

public interface Queue<E> extends Collection<E> {...}

: Collection을 상속받는 '인터페이스'이다. (Stcak은 클래스였는데)
: 따라서, 구현해야 사용할 수 있을 것이다.
: 그래서 보통 Queue를 사용할 때, LinkedLIst, 혹은 우선 순위 큐라는 것을 쓰나보다.
: 메서드들도 LinkedList에서 구현된 것으로 사용.

>Queue의 하위 인터페이스
1. Deque<E>
2. BlockingDeque<E>
3. BlockingQueue<E>
4. TransferQueue<E>

// 자료구조 추가 공부하면서 상속, 구현 관계에 있는게 뭐가 있고, 따라서 어떤 메서드를 더 쓸 수 있는지도 볼 것.

'코드스테이츠_국비교육 > [Section2]' 카테고리의 다른 글

24.02_Graph_22.09.23  (1) 2022.09.25
24.01_Tree_22.09.23  (0) 2022.09.25
23.02_Stack_22.09.22  (1) 2022.09.23
23.01_자료구조_22.09.22  (0) 2022.09.23
22_JSON 및 재귀 문제 풀이_22.09.21  (0) 2022.09.21