CS/DataStructure&Algorithm

선형구조 - 큐

용용띠용 2025. 4. 30. 20:02

Queue

: 데이터를 일시적으로 쌓아놓는 자료구조이다.

 

특징

- FIFO: 선입선출

- 단방향 구조

- 한 번에 데이터 한 개만 삽입, 삭제

- 버퍼, BFS 등에서 사용

 

구성요소

- Element: 데이터 요소

- Front: 맨 앞 요소의 인덱스로 물리적이 아니라 논리적인 데이터 순서

- Rear: 맨 뒤 요소의 하나 뒤 인덱스로 물리적이 아니라 논리적인 데이터 순서

 

선언

- java.util.Queue 클래스에서 제공한다.

//ex Integer 형
Queue<Integer> queue = new Queue<>();

 

데이터 추가

1. add();

- 성공: true 반환

- 실패: false 반환

- 큐가 꽉 찬 경우 IllegalStateException 발생

Queue<Integer> queue = new Queue<>();

queue.add(6);

 

2. offer();

- 성공: true 반환

- 실패: false 반환

- 큐가 빈 경우 NoSuchElementException 발생

- 큐가 꽉 찬 경우 fasle 반환

Queue<Integer> queue = new Queue<>();

queue.offer(6);

 

데이터 제거

1. remove();

- front 항목 반환 및 제거

- 큐가 빈 경우 null 반환

Queue<Integer> queue = new Queue<>();

queue.add(1);
queue.add(2);
queue.add(3);

queue.remove();

 

2. poll();

- front 항목 반환 및 제거

- 큐가 빈 경우 NoSuchElementException 반환

Queue<Integer> queue = new Queue<>();

queue.add(1);
queue.add(2);
queue.add(3);

queue.poll();

 

다양한 메서드

메서드 설명 반환값 예시
peek() 큐의 front 항목 반환, 삭제x 큐의 front 값
- 큐가 빈 경우: null 반환
queue.peek();
element() 큐의 front 항목 반환, 삭제x 큐의 front 값
- 큐가 빈 경우: NoSuchElementException 발생
queue.element();
clear() 큐 비우기   queue.clear();
size() 큐 의 크기 반환 큐 의 크기 queue.size();

 

 

 

종류

1. 선형 큐(Linear Queue)

: FIFO의 특징을 갖는 기본 

 

주요작업

- Enqueue: rear에 항목 추가

- Dequeue: front에서 항목 제거

 

특징

- front: 삭제 연산만 수행

- rear: 삽입 연산만 수행

- FIFO

- Underflow, Overflow 발생 가능

 

단점

- Dequeue 시 front에 값이 없기 때문에 한 칸씩 값 이동시켜야 한다 => 시간 복잡도 ↑

// 이동시키지 않는 경우 공백이 삭제로 인해 공백이 발생한다. => 그냥 값이 빈다.

 

 

2. 원형 큐(Circular Queue)

: 선형 큐의 단점을 보완한 큐

 

 

주요작업

- 초기 상태: 빈 상태: front = -1, rear = -1, 배열 크기 = n

- 첫 번째 Enqueue: front = -1, rear = 0 => front = 0, rear = 0

- 그 이후의 Enqueue: rear에 항목 추가, rear 포인터 + 1

- Dequeue: front에서 항목 제거, front 포인터 + 1

- 마지막 Dequeue: front = rear => front = rear = -1

 

특징

- 큐 다 차지 않는 이상 무한으로 데이터 삽입 삭제 가능

- 메모리 효율적으로 사용 가능

 

단점

- 초기화 시점에 배열 크기 결정해서 동적으로 크기 조절이 불가하다

 

 

3. 우선순위 큐(Priority Queue)

: 먼저 들어온 데이터가 아니라 우선순위가 높은 데이터가 먼저 나가는 구조

- 힙으로 구현한다.

- 비선형 자료구조이기 때문에 다른 게시글에서 설명하겠다.

 

 

4. 데 큐(De Queue)

: 양 끝이 front이자 rear인 구조

 

특징

- Stack과 Queue의 장점을 갖고 있다.

- FIFO, LIFO 유연하게 지원한다.

- 양쪽에서 data를 삽입, 삭제가 가능하다.

     - front

          - addFirst()

          - offerFirst()

     - rear

          - addLast()

          - offerLast()