标签:io ar java for 数据 on as size new
package queue.circleSequenceQueue;
/**
* 这里我们规定队列满时数组中还有一个空闲空间,不允许将数组中的空间全部存满
* 循环队列满的条件是:(rear+1)%QueueSize==front
* 长度计算公式为:(rear-front+QueueSize)%QueueSize
* @author wl
*/
public class CircleSequenceQueue {
Object[] elementData;//数组用于存放队列元素
int front;//对头指针
int rear;//队尾指针
int QueueSize;//队列大小
//无参构造函数,用于队列的默认初始化
public CircleSequenceQueue(){
elementData=new Object[10];
front=0;
rear=0;
QueueSize=elementData.length;
}
//带参构造函数,用于指定队列初始化长度
public CircleSequenceQueue(int capacity){
elementData=new Object[capacity];
front=0;
rear=0;
QueueSize=elementData.length;
}
//队列的大小
public int size(){
return (rear-front+QueueSize)%QueueSize;
}
//判断队列是否为空
public boolean isEmpty(){
return front==rear;
}
//判断队列是否已满
public boolean isFull(){
return (rear+1)%QueueSize==front;
}
//入队列
public void enQueue(int data){
if(isFull()){
throw new IndexOutOfBoundsException("队列已满");
}
elementData[rear]=data;//将data元素加入队尾
rear=(rear+1)%QueueSize;//将rear指针向后移动一位,如果rear到最后则转移到数组头部
}
//出队列
public Object deQueue(){
if(isEmpty()){
throw new IndexOutOfBoundsException("队列为空");
}
//得到对头元素
Object data=elementData[front];
//释放对头元素
elementData[front]=null;
//front指针向后移动一位,若到最后则转移到数组头部
front=(front+1)%QueueSize;
return data;
}
//得到对头元素,不删除
public Object getFront(){
if(isEmpty()){
return null;
}else{
return elementData[front];
}
}
//打印队列中的元素
public void traverse(){
if(isEmpty()){
System.out.println("null");
}else{
int counter=0;//计数器
for(int i=front;counter<=size();){
if(elementData[i]!=null){
System.out.print(elementData[i]+" ");
}
i=(i+1)%QueueSize;
counter++;
}
}
System.out.println();
}
}
Java数据结构系列之——队列(2):循环队列的顺序存储结构及其实现
标签:io ar java for 数据 on as size new
原文地址:http://blog.csdn.net/tmwl0728/article/details/41400153