카테고리 없음

큐(queue)란?

matos 2022. 12. 13. 22:51

Queue 란?

이 자료구조에서는 (front)과 (back)가 존재하며, 먼저 들어온 데이터가 먼저 빠져 나가는 선입선출(First-in-First-out)의 규칙을 따릅니다.

 

 

은행에서 사람들이 줄을 서서 대기하다가 먼저 온 순서대로 업무를 보는 것과 같습니다. 먼저 온 사람이 먼저 서비스를 받는 것(FIFO)이죠

 

 

 

 

 

 

 

 

자바에서 큐(Queue)는 LinkedList를 활용해서 사용한다.

import java.util.Queue;
import java.util.LinkedList;
Queue<Element> queue = new LinkedList<Element>();

 

Enqueue 동작

큐에 데이터를 추가하는 동작으로 offer  add 메소드가 있다.

두 메소드의 차이점은 공간의 제약이 있는 큐(Queue) 구현체에서 발생한다.

// 큐가 꽉차있는 경우
offer(value) : false 반환
add(value) : IllegalStateException 발생

사이즈 제약이 있는 큐를 사용하는 경우는 offer 메소드의 사용을 더 권장한다.

 

Dequeue 동작

큐의 데이터를 추출하는 동작으로, poll remove 모두 큐의 첫 번째 데이터를 제거하는 메소드이다.

두 메소드의 차이는 데이터가 없는 큐(Queue) 구현체에서 발생한다

// 큐가 비어있는 경우
poll() : null 반환
remove() : NoSuchElementException 발생

 

한 번에 큐에 있는 모든 데이터를 지우고 싶은 경우 clear 메소드를 호출하면 된다.

clear()

 

Peek 동작

큐의 데이터를 조회하는 동작으로, 첫 번째 데이터를 조회할 때 peek element 메소드를 사용한다.

두 메소드 역시 큐가 비어있을 때 동작 차이가 있다.

 

// 큐가 비어있는 경우
peek() : null 반환
element() : NoSuchElementException 발생

 

 

 

import java.util.LinkedList;

import java.util.Queue;

public class StackAndQueue {

public static void main(String[] args) {

 

Queue<String> queue = new LinkedList<String>();

queue.offer("0");

queue.offer("1");

queue.offer("2");

 

/*queue.add("3");

queue.add("4");

queue.add("5");*/

 

System.out.println("=== Queue ===");

while (!queue.isEmpty()) {

System.out.println(queue.poll());

   }

  }

 }

 

실행결과