Queue?

SeungJoo
|2024. 4. 12. 23:18
728x90

Queue?

Queue는 줄을 서다라는 뜻으로 큐에 먼저 들어간 데이터가 먼저 나오는 자료 구조입니다. 스택과 마찬가지로 예를 들어보면 맛집에서 줄을 선 순서대로 입장하는 것과 똑같습니다. 이런 큐의 특징을 선입선출 또는 FIFO라고 하며 큐에서 삽입하는 연산을 Enqueue, 꺼내는 연산을 Dequeue라고 합니다.

 

큐의 특징

Enqueue

큐에 데이터를 추가하는 작업이며 새로운 데이터는 항상 큐의 끝에 추가됩니다.

// 큐에 데이터를 추가하는 메서드
public void enqueue(E item) {
    // 만약 큐의 용량이 가득 찬 경우 예외 처리를 할 수도 있습니다.
    if (isFull()) {
        System.out.println("Queue is full. Cannot enqueue.");
        return;
    }
    
    // 새로운 데이터를 큐의 끝에 추가합니다.
    rear = (rear + 1) % capacity;
    items[rear] = item;
    size++;
}

Dequeue

큐에서 데이터를 제거하고 반환하는 작업입니다. 제거되는 데이터는 큐의 가장 앞에 있는 데이터입니다.

// 큐에서 데이터를 제거하고 반환하는 메서드
public E dequeue() {
    if (isEmpty()) {
        System.out.println("Queue is empty. Cannot dequeue.");
        return null; // 혹은 예외 처리를 할 수도 있습니다.
    }
    E removedItem = items[front];
    front = (front + 1) % capacity;
    size--;
    return removedItem;
}

그 외 queue

public interface Queue<E> extends Collection<E> {
    // 큐에 요소를 추가합니다. 만약 용량 제한으로 인해 요소를 추가할 수 없는 경우 예외를 발생시킵니다.
    boolean add(E e); // throws IllegalStateException
    
    // 큐에 요소를 추가합니다. 용량 제한으로 인해 요소를 추가할 수 없는 경우 false를 반환합니다.
    boolean offer(E e);
    
    // 큐에서 요소를 제거하고 반환합니다. 큐가 비어있는 경우 예외를 발생시킵니다.
    E remove(); // throws NoSuchElementException
    
    // 큐에서 요소를 제거하고 반환합니다. 큐가 비어있는 경우 null을 반환합니다.
    E poll();
    
    // 큐의 맨 앞에 있는 요소를 반환합니다. 요소는 제거되지 않습니다. 큐가 비어있는 경우 예외를 발생시킵니다.
    E element(); // throws NoSuchElementException
    
    // 큐의 맨 앞에 있는 요소를 반환합니다. 요소는 제거되지 않습니다. 큐가 비어있는 경우 null을 반환합니다.
    E peek();
}

큐의 특성을 활용 분야

작업 대기열

네트워크 통신을 할 때 다수의 클라이언트에서 서버에 작업을 요청하면 서버 요청이 들어온 순서로 작업을 할 때 사용할 수 있습니다.

이벤트 처리

애플리케이션이나 시스템에서 사용자의 이벤트이며 키보드 입력, 마우스 움직임 등을 처리할 때 사용할 수 있습니다.

추가 정리

1. 큐는 일반적으로 FIFO 방식으로 요소를 관리하며 새로운 요소는 항상 큐의 끝에 추가되며, 요소는 큐의 앞에서 제거됩니다.

2. 용량 제한이 있는 큐에서 요소를 추가할 때는 add() 대신 offer 메서드를 사용하는 것이 좋습니다.

3. 큐는 보통 null요소의 추가를 허용하지 않으며 일부 구현에서 허용할 수 있지만 보통은 null 인 경우 큐에 추가하는 것을 금지합니다.

 

 

Queue 알고리즘

이 문제로 Queue에 대해 쉽게 이해할 수 있었다. 

 

 

 

 

 

728x90

'알고리즘' 카테고리의 다른 글

수식 표기법  (0) 2024.02.26
탐욕법  (0) 2024.02.22
해시법  (0) 2024.02.20