package com.coding.basic;
public class Queue {
private int size;
private int head;
private int tail;
private Object[] queue;
public Queue()
{
this.size = 0;
this.head = 0;
this.tail = 0;
}
public void enQueue(Object o) {
if(isFull())
{
resize();
}
int newtail = (head+size)%queue.length;
queue[newtail] = o;
size++;
}
public Object deQueue() {
if(isEmpty())
{
return null;
}
Object oldHead = queue[head];
head = (head-1)%queue.length;
size--;
return oldHead;
}
public int getHead(){
return head;
}
public int getTail(){
return tail;
}
public boolean isEmpty() {
return size == 0;
}
public int size() {
int diff = tail - head;
return diff;
}
//
public boolean isFull(){
return size == queue.length;
}
public void resize(){
Object[] newQueue = new Object[2*(queue.length)];
System.arraycopy(queue, 0, newQueue, 0, size);
this.queue = newQueue;
newQueue = null;
}
}