Untitled

먼저 들어온 데이터가 먼저 나가는 FIFO(First-In - First-Out) 원칙따름

일상생활에서 줄을 서는 것과 유사한 개념

Enqueue: 큐에 요소를 추가

Dequeue: 큐에 요소를 제거

Front & Rear : 맨 앞 요소 Front 맨 뒤 요소 rear

제한한 크기 : 배열을 기반으로 한 정적 큐와 연결리스트를 기반으로 한 동적 큐로 나뉨

// Node 클래스: 링크드 리스트의 각 노드를 나타냅니다.
class Node {
    int data;  // 노드가 저장하는 데이터
    Node next; // 다음 노드를 가리키는 포인터

    // Node 객체를 생성할 때 데이터를 받아 초기화합니다.
    public Node(int data) {
        this.data = data;
        this.next = null; // 다음 노드는 초기에는 없으므로 null로 설정합니다.
    }
}

// Queue 클래스: 큐를 구현합니다.
class Queue {
    private Node front; // 큐의 맨 앞 요소를 가리키는 포인터
    private Node rear;  // 큐의 맨 뒤 요소를 가리키는 포인터

    // 큐를 초기화합니다.
    public Queue() {
        this.front = null; // 초기에는 노드가 없으므로 null로 설정합니다.
        this.rear = null;  // 초기에는 노드가 없으므로 null로 설정합니다.
    }

    // 큐가 비어있는지 확인합니다.
    public boolean isEmpty() {
        return front == null; // front가 null이면 큐는 비어있습니다.
    }

    // 큐에 요소를 추가합니다.
    public void enqueue(int data) {
        Node newNode = new Node(data); // 새로운 노드를 생성합니다.

        if (isEmpty()) {
            // 큐가 비어있다면 새로운 노드가 맨 앞이자 맨 뒤입니다.
            front = rear = newNode;
        } else {
            // 큐가 비어있지 않다면 새로운 노드를 큐의 뒤쪽에 추가합니다.
            rear.next = newNode; // 현재 rear가 가리키는 노드의 다음을 새 노드로 설정합니다.
            rear = newNode;      // rear를 새로운 노드로 업데이트합니다.
        }
    }

    // 큐에서 요소를 제거하고 반환합니다.
    public int dequeue() {
        if (isEmpty()) {
            throw new IllegalStateException("Queue is empty"); // 큐가 비어있으면 예외를 던집니다.
        }

        int data = front.data; // front가 가리키는 노드의 데이터를 저장합니다.
        front = front.next;    // front를 다음 노드로 업데이트합니다.

        if (front == null) {
            rear = null; // 만약 큐가 비어있다면 rear도 null로 업데이트합니다.
        }

        return data; // 제거된 요소의 데이터를 반환합니다.
    }

    // 큐의 맨 앞 요소를 반환합니다.
    public int peek() {
        if (isEmpty()) {
            throw new IllegalStateException("Queue is empty"); // 큐가 비어있으면 예외를 던집니다.
        }

        return front.data; // front가 가리키는 노드의 데이터를 반환합니다.
    }
}

Circular Queue

고정된 크기의 배열로 구현