카테고리 없음

[JAVA자료구조] 단순연결리스트로 구현한 큐

인생개발 이정환 2024. 8. 20. 21:18
public class LinkedListQueue {
    // Node 클래스: 큐의 각 요소를 나타냅니다.
    private static class Node {
        private int data;
        private Node next;

        public Node(int data) {
            this.data = data;
            this.next = null;
        }
    }

    private Node front; // 큐의 앞을 가리키는 포인터
    private Node rear;  // 큐의 뒤를 가리키는 포인터

    public LinkedListQueue() {
        this.front = null;
        this.rear = null;
    }

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

    // 큐의 뒤에 요소를 추가합니다.
    public void enqueue(int item) {
        Node newNode = new Node(item);

        // 큐가 비어 있을 경우, front와 rear를 새 노드로 설정합니다.
        if (isEmpty()) {
            front = newNode;
            rear = newNode;
        } else {
            rear.next = newNode; // 기존 rear 노드의 next를 새 노드로 연결합니다.
            rear = newNode;      // rear를 새 노드로 업데이트합니다.
        }
    }

    // 큐의 앞에서 요소를 제거하고 반환합니다.
    public int dequeue() {
        if (isEmpty()) {
            System.out.println("Queue is empty");
            return -1;
        }
        int item = front.data;
        front = front.next; // front를 다음 노드로 이동합니다.

        // 큐에서 모든 요소가 제거되었을 경우, rear도 null로 설정합니다.
        if (front == null) {
            rear = null;
        }
        return item;
    }

    // 큐의 앞에 있는 요소를 반환하지만 제거하지는 않습니다.
    public int peek() {
        if (isEmpty()) {
            System.out.println("Queue is empty");
            return -1;
        }
        return front.data;
    }

    // 큐의 상태를 출력합니다.
    public void display() {
        if (isEmpty()) {
            System.out.println("Queue is empty");
            return;
        }
        Node current = front;
        System.out.print("Queue: ");
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }

    // 큐 사용 예시
    public static void main(String[] args) {
        LinkedListQueue queue = new LinkedListQueue();
        queue.enqueue(10);
        queue.enqueue(20);
        queue.enqueue(30);
        queue.display();  // Queue: 10 20 30 

        System.out.println(queue.dequeue());  // 10
        queue.display();  // Queue: 20 30 

        System.out.println(queue.peek());  // 20
        queue.display();  // Queue: 20 30 
    }
}