数据结构系列之循环队列

来源:互联网 发布:淘宝护肤品店铺排行 编辑:程序博客网 时间:2024/06/05 09:27

                                        基于数组的循环队列的Java实现

1、借助数组创建一个循环队列类

package 队列;/*数组实现的循环队列*/public class ArrayQueue {private int first,last,maxSize;private Object[] storage;public ArrayQueue(){this(100);}public ArrayQueue(int n){     //构造函数maxSize=n;storage=new Object[maxSize];first=last=-1;}public int getLength(){     //取得队列中有效数据长度if(this.isEmpty())return 0;else if(last>=first)return last-first+1;elsereturn (maxSize-first)+(last-0+1);}public boolean isFull(){     //判断是否为满队列return first==0&&last==maxSize-1||first==last+1;}public boolean isEmpty(){      //判断是否为空队列return first==-1;}public void enqueue(Object e1){  //进队列操作if(this.isEmpty()){        //当队列为空时storage[0]=e1;first=last=0;}else if(!this.isFull()){      //队列不空且不满时   if(last==maxSize-1){  //当last位于最后一个位置时storage[0]=e1;last=0;   }elsestorage[++last]=e1;}}public Object dequeue(){      //删除队列头元素if(!this.isEmpty()){Object temp=storage[first];if(first==last)      //只有一个元素时first=last=-1;else if(first==maxSize-1)  //不止一个元素且first位于最后位置时first=0;else                   //不止一个元素且first不是位于最后位置时first++;return temp;}elsereturn null;}public void printAll(){if(!this.isEmpty()){if(last>=first){//当first小于last时正常打印for(int i=first;i<=last;i++)System.out.print(storage[i]+" ");}else{//当first大于last时分两次打印,先打印first到maxSize-1;再打印0到lastfor(int i=first;i<maxSize;i++)System.out.print(storage[i]+" ");for(int j=0;j<last+1;j++)System.out.print(storage[j]+" ");}}elseSystem.out.print("队列已空!");}}

2、创建测试类

package 队列;public class Test {public static void main(String[] args) {// TODO Auto-generated method stubArrayQueue q=new ArrayQueue(3);q.enqueue(2);System.out.println("队列此时长度为:"+q.getLength());   //1q.enqueue(1);System.out.println("队列此时长度为:"+q.getLength());    //2q.enqueue(4);//3q.dequeue();//2System.out.println("队列此时长度为:"+q.getLength());  //2q.dequeue();System.out.println("队列此时长度为:"+q.getLength());    //1q.dequeue();//0q.enqueue(4);System.out.println("队列此时长度为:"+q.getLength());//1q.printAll();}}

3、测试结果

队列此时长度为:1队列此时长度为:2队列此时长度为:2队列此时长度为:1队列此时长度为:14 


0 0