class Queue { private int[] a; private int head = 0; private int tail = 0; private int count = 0; private int N = 3; public Queue() { a = new int[N]; } public boolean isempty() { return count == 0; } public void enqueue(int value) { if (count == a.length) resize(); count = count+1; a[tail] = value; tail = tail+1; if (tail == a.length) tail = 0; } public void dequeue() { count = count-1; head = head+1; } public int first() { return a[head]; } private void resize() { int b[] = new int[2*a.length+1]; for (int i=head; i<a.length; i++) b[i-head] = a[i]; for (int i=0; i<head; i++) b[i+a.length] = a[i]; head = 0; tail = count; a = b; } }