공부기록

Queue 본문

CS/Data Structure

Queue

코타쿠 2021. 5. 29. 22:26

Queue?

구현

queue에서 구현해야 하는 기능은 아래의 인터페이스와 같다.

public interface Queue<E> {

    int size();

    boolean isEmpty();

    void enqueue(E e);

    E first();

    E dequeue();

}

queue를 구현하는 방법에는 배열을 사용하는 방법, linked list를 사용하는 방법이 있다.

배열을 사용한 Queue, Array Queue

public class ArrayQueue<E> implements Queue<E> {

    private E[] data;
    private int f = 0;
    private int sz = 0;

    public ArrayQueue(){
        this(CAPACITY);
    }

    public ArrayQueue(int capacity){
        data = (E[]) new Object[capacity];
    }

    public int size(){
        return (sz == 0);
    }

    public void enqueue(E e) throws IllegalStateException{
        if(sz == data.length)
            throw new IllegalStateException("Queue is full");
        int avail = (f + sz)%data.length;
        data[avail] = e;
        sz++;
    }

    public E first(){
        if(isEmpty())
            return null;
        return data[f];
    }

    public E dequeue(){
        if(isEmpty())
            return null;
        E answer = data[f];
        data[f] = null;
        f = (f+1)%data.length;
        sz--;
        return answer;
    }

}

linked list를 사용한 queue, Linked Queue

public class LinkedQueue<E> implements Queue<E> {
    private SinglyLinkedList<E> list = new SinglyLinkedList<>();
    public LinkedQueue(){};
    public int size(){
        return list.size();
    }
    public boolean isEmpty(){
        return list.isEmpty();
    }
    public void enqueue(E element){
        list.addLast(element);
    }
    public E first(){
        return list.first();
    }
    public E dequeue(){
        return list.removeFirst();
    }
}

linked list를 구현한 코드는 여기에서 확인할 수 있다.

'CS > Data Structure' 카테고리의 다른 글

Linked List  (0) 2021.05.31
Sorting  (0) 2021.05.30
Linked List  (0) 2021.05.29
Stack  (0) 2021.05.29
Hash  (0) 2021.05.28