Alledy 2019. 5. 27. 23:08

Queue

public class Queue {

    private int maxSize;
    private long[] queArray;
    private int front; // 큐의 첫번째 인덱스(포인터 역할)
    private int rear; // 큐의 마지막 인덱스
    private int nItems; // 전체 길이

    public Queue(int size) {
        this.maxSize = size;
        this.queArray = new long[size];
        front = 0;
        rear = -1;
        nItems = 0;
    }

    public void insert(long j) {
        if(rear == maxSize -1) {
            rear = -1; // 다시 앞에서부터 덮어씌움. Circular Queue
        }
        rear++;
        queArray[rear] = j;
        nItems++;
    }

    public long remove() {
        long temp = queArray[front];
        front++;
        nItems--;
        if(front == maxSize) {
            front = 0;
        }
        return temp;
    }

    public long peakFront() {
        return queArray[front];
    }

    public boolean isEmpty() {
        return nItems == 0;
    }

    public boolean isFull() {
        return nItems == maxSize;
    }

    public void view() {
        System.out.print("[ ");
        for(int i = 0 ; i < queArray.length ; i++) {
            System.out.print(queArray[i] + " ");
        }
        System.out.print(" ]");
    }
}

public class App {
    public static void main(String[] args) {
        Queue myQueue = new Queue(5);
        myQueue.insert(100);
        myQueue.insert(200);
        myQueue.insert(300);
        myQueue.insert(400);
        myQueue.insert(500);
        myQueue.insert(600); // 0번째 인덱스가 100에서 600으로 덮어씌워짐.
        myQueue.view();
    }
}