package queue;
import java.util.NoSuchElementException;
/**
* Blog : http://blog.csdn.net/javazejian [原文地址,请尊重原创]
* @author 羊头怪
*
* @param <T>
*/
public class MyQueueImple<T> implements MyQueue<T> {
//底层使用数字存取数据
private T array[];
//有效数据大小
private int elements;
//队头
private int front;
//队尾
private int end;
/**
* 初始化
*/
public MyQueueImple() {
array = (T[]) new Object[10];
elements=0;
front=0;
end=-1;
}
/**
* 初始化
* @param size
*/
public MyQueueImple(int size){
array = (T[]) new Object[size];
elements=size;
front=0;
end=-1;
}
/**
* 返回队列长度
*/
@Override
public int length() {
// TODO Auto-generated method stub
return elements;
}
/**
* 判断队列是否为空
*/
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return end==-1;
}
/**
* 判断队列是否满了
* @return
*/
public boolean isfull() {
return end==array.length-1;
}
/**
* 入队操作。成功返回true,失败返回false
*/
@Override
public boolean add(T data) {
// TODO Auto-generated method stub
if(!isfull()) {
array[++end]=data;
elements++;
return true;
}
return false;
}
/**
* 插入元素,与add方法不同 该方法只能抛出未经检查的异常使添加元素失败 而不是不出现异常
* 例如在容量固定(有界)的队列中 NullPointerException:data==null时抛出
*/
@Override
public boolean offer(T data) {
if(isfull()) {
throw new ArrayIndexOutOfBoundsException();
}
array[++end]=data;
elements++;
return true;
}
/**
* 返回队头元素,不进行删除操作,若队列元素为空,返回null
*/
@Override
public T peek() {
if(isEmpty()) {
return null;
}
return array[front];
}
/**
* 返回队头元素,不执行删除操作,若队列为空,抛出异常 NoSuchElementException
*/
@Override
public T element() {
if(!isEmpty()) {
throw new NoSuchElementException();
}
return array[front];
}
/**
* 出队,进行删除操作,返回队头元素,若队列为空,返回null
*/
@Override
public T poll() {
if(isEmpty()) {
return null;
}
T value = array[front++];
elements--;
return value;
}
/**
* 出队,执行删除操作,返回队头元素,若队列为空,返回NoSuchElementException
*/
@Override
public T remove() {
if(!isEmpty()) {
throw new NoSuchElementException();
}
elements--;
return array[front++];
}
/**
* 清空队列
*/
@Override
public void clearQueue() {
// TODO Auto-generated method stub
}
public void toMyQueue() {
System.out.print("[ ");
for(int i=0;i<elements;i++) {
System.out.print(array[i]+" ");
}
System.out.print("]");
}
}