Circular Queue

题目地址:
https://www.careercup.com/question?id=14133666

解题思路:
这道题就是用一个array再加上3个变量,head,tail和size来控制enqueue和dequeue的位置以及corner case的handle。每次用取mod得办法来找到合适的index。

代码:

public class CircularQueue {
    private int size;
    private int head;
    private int tail;
    private int q[];
    public CircularQueue(int s) {
        size = 0;
        q = new int[s+1];
        head = 0;
        tail = 0;
    }
    public synchronized void initialize() {
        head = 0;
        tail = 0;
    }
    public synchronized boolean enqueue(int v) {
        int tmp = (tail+1) % size;
        q[tail] = v;
        tail = tmp;
        if(size < q.length){
            size++;
        }
        return true;
    }
    public synchronized int dequeue() throws Exception{
        if (size == 0) throw new Exception("queue underflow!");
        if(size > 0){
            size--;
        }
        int tmp = q[head];
        head = (head + 1) % size;
        return tmp;
    }
}

Comments

Popular Posts