BACKEND/Data Structure & Algorithm

선형자료구조 - 큐(Queue)

우진하다 2023. 5. 18. 21:31

Queue.

큐는 대기열이라고도 하며 선입선출(First In First Out) 자료구조 입니다.
먼저 들어온 데이터가 먼저 나가는 구조로 쉽게 말해 선착순을 떠올리면 됩니다.
먼저 온 사람은 먼저 집에가세요.!!!!!!!
입력 순서대로 데이터 처리가 필요할 때 사용하며 프린터 출력 대기열 등과 비교 됩니다.

자바에서는 Queue는 인터페이스로 정의되어 있고 Priority Queue 등 구현되어 있으나
ArryList나 LinkedList 클래스를 활용하여 구현하는 경우가 있음

  • 큐 데이터 추가

  • 큐 데이처 삭제

 

Queue 주요 메서드.

    
		package day017;

import java.util.LinkedList;
import java.util.Queue;

public class QueueTest1 {
    public static void main(String[] args) {
        Queue queue = new LinkedList<>();

        // 데이터 삽입 - Enqueue
        queue.add(1);
        queue.add(2); // 사용 공간이 없어 삽입 실패시 Exception 발생
        queue.offer(3); // 공간이 없어 실패 시 flase 반환
        System.out.println(queue); // [1, 2, 3]

        // 데이터 삭제 - Dequeue
        System.out.println(queue.remove()); // 1 맨 앞 요소를 반환하고 삭제, 큐가 비어있다면 예외 발생
        System.out.println(queue.poll()); // 2 기능은 같지만 비어있을 시 null 반환

        // head 조회
        System.out.println(queue.peek()); // 3 , 비어있으면 null 반환
        System.out.println(queue.element()); // 3 , isEmpty() == 예외 발생

    }
}

    
  

 

 

ArrayList로 Queue 구현하기.

    

import java.util.ArrayList;

class MyQueue {
    private ArrayList arrayQueue = new ArrayList<>();

    public void enQueue(String data) {
        arrayQueue.add(data);
    }

    public String deQueue() {
        int length = arrayQueue.size();
        if (length == 0) {
            System.out.println("Queue is empty");
            return null;
        }
        return arrayQueue.remove(0);
    }

    public String peek() {
        int length = arrayQueue.size();
        if (length == 0) {
            System.out.println("Queue is empty");
            return null;
        }
        return arrayQueue.get(0);
    }

    @Override
    public String toString() {
        return "MyQ{" +
                "arrayQueue=" + arrayQueue +
                '}';
    }
}

public class QueueArrayListTest {
    public static void main(String[] args) {
        MyQueue queue = new MyQueue();

        queue.enQueue("A");
        queue.enQueue("B");
        queue.enQueue("C");
        System.out.println(queue.peek()); // A
        System.out.println(queue); //MyQ{arrayQueue=[A, B, C]}

        System.out.println(queue.deQueue()); // A
        System.out.println(queue.deQueue()); // B
        System.out.println(queue.deQueue()); // C
        System.out.println(queue.deQueue()); // empty, null

        System.out.println(queue); // []
    }
}