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(); } }
时间: 2024-10-03 14:01:57