数据结构系列之循环队列

                                        基于数组的循环队列的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;
		else
			return (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;
		   }else
				storage[++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;
		}
		else
			return 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到last
				for(int i=first;i<maxSize;i++)
					System.out.print(storage[i]+" ");
				for(int j=0;j<last+1;j++)
					System.out.print(storage[j]+" ");
			}
		}
		else
			System.out.print("队列已空!");
	}
}

2、创建测试类

package 队列;

public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ArrayQueue q=new ArrayQueue(3);
		q.enqueue(2);
		System.out.println("队列此时长度为:"+q.getLength());   //1
		q.enqueue(1);
		System.out.println("队列此时长度为:"+q.getLength());    //2
		q.enqueue(4);//3
		q.dequeue();//2
		System.out.println("队列此时长度为:"+q.getLength());  //2
		q.dequeue();
		System.out.println("队列此时长度为:"+q.getLength());    //1
		q.dequeue();//0
		q.enqueue(4);
		System.out.println("队列此时长度为:"+q.getLength());//1
		q.printAll();
	}

}

3、测试结果

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值