ํ(Queue)

1 minute read

ํ(Queue)

Queue๋ž€?

ํ•œ์ชฝ ๋์—์„œ ์›์†Œ๋ฅผ ๋„ฃ๊ณ  ๋ฐ˜๋Œ€์ชฝ ๋์—์„œ ์›์†Œ๋ฅผ ๋บ„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ(FIFO).

Queue์˜ ์„ฑ์งˆ

  • ์›์†Œ์˜ ์ถ”๊ฐ€๊ฐ€ O(1)
  • ์›์†Œ์˜ ์ œ๊ฑฐ๊ฐ€ O(1)
  • ์ œ์ผ ์•ž/๋’ค์˜ ์›์†Œ ํ™•์ธ์ด O(1)
  • ์ œ์ผ ์•ž/๋’ค๊ฐ€ ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์˜ ํ™•์ธ/ ๋ณ€๊ฒฝ์ด ์›์น™์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ

Queue ๊ตฌํ˜„ํ•˜๊ธฐ

array๋กœ ๊ตฌํ˜„ํ•œ Queue

class Queue {
    private final int MAX = 100005;
    private final int[] data = new int[MAX];
    private int head = 0, tail = 0;

    boolean offer(int e) {
        data[tail] = e;
        tail++;
        return true;
    }


    int poll() {
        return data[head++];
    }


    int peek() {
        return data[head];
    }

    int size() {
        return tail - head;
    }

    boolean isEmpty() {
        return size() == 0;
    }
}

LinkedList๋กœ ๊ตฌํ˜„ํ•œ Queue

class Queue<E> {
    private Node<E> head;
    private Node<E> tail;

    private int size = 0;

    private static class Node<E> {
        E data;
        Node<E> next;

        Node(E data) {
            this.data = data;
        }
    }

    boolean offer(E e) {
        Node<E> newNode = new Node<>(e);
        if (head == null) {
            head = newNode;
        } else {
            tail.next = newNode;
        }
        tail = newNode;
        size++;
        return true;
    }


    E poll() {
        if (size == 0) return null;
        E e = head.data;
        Node<E> nextNode = head.next;

        head.data = null;
        head.next = null;

        head = nextNode;
        size--;
        return e;
    }


    E peek() {
        return head.data;
    }

    int size() {
        return size;
    }

    boolean isEmpty() {
        return size == 0;
    }
}

java์˜ Queue์—๋Š” offer, poll, peek ์™ธ์—๋„ add, remove, element ๋ฉ”์†Œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
java์˜ queue interface์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋น„๊ตํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ย  ์˜ˆ์™ธ๋ฐœ์ƒ ๊ฐ’ ๋ฆฌํ„ด
์ถ”๊ฐ€(enqueue) add(e) offer(e)
์‚ญ์ œ(dequeue) remove() poll()
๊ฒ€์‚ฌ(peek) element() peek()

์ฐจ์ด๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•ˆํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ด๋‹ค.