使用数组实现队列

来源:互联网 发布:开源团购java 编辑:程序博客网 时间:2024/06/08 11:06
package cn.my.queue;


/** 
 * 自定义队列: 队列先进先出(FIFO) 队列中的数据项不总是从数组的0下标开始,移除数据项后,
 * 队头指针会指向一个较高的下标位置
 * 循环队列(“缓冲环”)
 * @author wangbowen @date 2015年1月7日
 * @version 1.0
 */
public class QueueX {
/**
* 队列大小
*/
private int maxSize;
/**
* 队列数组
*/
private Long [] queueArray;
/**
* 队头数据项
*/
private int fornt;
/**
* 队尾数据项
*/
private int rear;
/**
* 数据项
*/
private int nItems;
/**
* 带参数的构造方法
* @param n
*/
public QueueX(int n) {
this.maxSize = n;
this.queueArray = new Long[maxSize];
this.fornt = 0;
this.rear = -1;
this.nItems = 0;
}
/**
* 插入数据
* @param j 
* void
*/
public void insert(long j){
if(!isFull()){
if(rear ==maxSize-1)
rear = -1;
queueArray[++rear] = j;
nItems++;
}else{
System.out.println("队列已满.....");
}
}
/**
* 删除数据项
* @return 
* Long
*/
public Long remove(){
if(!isEmpty()){
Long temp = queueArray[fornt++];
if(fornt==maxSize)
fornt = 0;
   nItems --;
return temp;
}else{
System.out.println("队列为空不能删除。。。。");
}
return null;
}
/**
* 获取队头数据
* @return 
* Long
*/
public Long peekFornt(){
return queueArray[fornt];
}
/**
* 队列是否为空
* @return 
* boolean
*/
    public boolean isEmpty(){
    return (nItems==0);
    }
    /**
     * 队列是否已满
     * @return 
     * boolean
     */
    public boolean isFull(){
    return (nItems==maxSize);
    }
    /**
     * 队列大小
     * @return 
     * int
     */
    public int queueSize(){
    return nItems;
    }
/**
* 获取队列大小
* @return  maxSize  队列大小
*/
public int getMaxSize() {
return maxSize;
}
/**
* 设置队列大小
* @param  maxSize  队列大小
*/
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
/**
* 获取队列数组
* @return  queueArray  队列数组
*/
public Long[] getQueueArray() {
return queueArray;
}
/**
* 设置队列数组
* @param  queueArray  队列数组
*/
public void setQueueArray(Long[] queueArray) {
this.queueArray = queueArray;
}
/**
* 获取队头数据项
* @return  fornt  队头数据项
*/
public int getFornt() {
return fornt;
}
/**
* 设置队头数据项
* @param  fornt  队头数据项
*/
public void setFornt(int fornt) {
this.fornt = fornt;
}
/**
* 获取队尾数据项
* @return  rear  队尾数据项
*/
public int getRear() {
return rear;
}
/**
* 设置队尾数据项
* @param  rear  队尾数据项
*/
public void setRear(int rear) {
this.rear = rear;
}
/**
* 获取数据项
* @return  nItems  数据项
*/
public int getnItems() {
return nItems;
}
/**
* 设置数据项
* @param  nItems  数据项
*/
public void setnItems(int nItems) {
this.nItems = nItems;
}
    
}
0 0