/**
* 队列的实现
* 队列中第一插入的元素会被第一个移除
* 几种常见的操作
* Insert 向队尾插入元素
* Remove 移除队首元素
* Peek 查看队首元素
* 队列也可以基于数组实现或者基于链表实现
* @author hp
*
*/
public class Queue {
private int maxSize;// 队列的大小 构造函数传入
private long [] queArray; //保存队列数据的数组
private int front; //队首指针、
private int rear; //队尾指针
private int nItems ;//表示当前元素的个数
public Queue(int s){
maxSize = s;
queArray = new long[s];
front = 0;
rear = -1;
nItems = 0;
}
//判断队列是否为空
public boolean isEmpty(){
return nItems ==0;
}
//判断队列是否已经满了
public boolean isFull(){
return nItems == maxSize;
}
//插入一个元素
public void insert(long j) throws Exception{
if(isFull()){
throw new Exception("队列已经满了");
}
if(rear == maxSize-1){
rear =-1;
}
queArray[++rear] = j;
nItems++;
}
//删除一个元素
public long remove(){
long temp = queArray[front++];
int a = front-1;
queArray[a]=0; //移除元素以后设置元素的位置为0
if(front == maxSize){
front =0;
}
nItems --;
return temp;
}
//队列元素个数
public int size(){
return nItems;
}
//查看队首元素
public long peekFront(){
return queArray[front];
}
public static void main(String[] args) throws Exception {
Queue queue = new Queue(4);
queue.insert(5);
queue.insert(6);
queue.insert(1);
queue.insert(3);
System.out.println(queue.remove());
System.out.println(queue.remove());
System.out.println(queue.remove());
System.out.println(queue.peekFront());
System.out.println(queue.remove());
System.out.println(queue.remove());
}
}