用Java数组实现队列

用数组实现。队首出队,队尾进队。

成员变量有:队首front,队尾back,队列长度size,对象数组data。

成员方法有:

构造方法,

获取队列的长度getSize(),

元素出队,在队首出队

元素入队,在对尾入队

public class Queue { 
    private int front;//队首
	private int back;//队尾
	private int size;//队列长度
	private Object[] data;

    public Queue(){//构造函数
       data=new Object[10];
    } 

	public int getSize(){//获取队列的长度
		return size; 
	} 

	public Object dequeue(){//出队,在队首出队
		Object o=null; 
		if(size>0){ 
			size--;
			o=data[front];
            	data[front]=null; //便于gc回收
            	front=(front>data.length-1)?0:front+1;
		} 
		return o;
    } 

    public void enqueue(Object o){//进队,在队尾进队
       if(size>=data.length){ 
         Object[] newData=new Object[data.length*2]; //数组扩容两倍
         for(int i=0;i<data.length;++i){ //将原数组的数据copy到新的数组中
            newData[i]=data[i]; 
         }
         data=newData;
       } 
       data[back]=o;
       back++;
       size++;
    }
 }

讨论: 如果经过 10 次入队后,队列似乎是满了。但是有可能队列中只存在几个元素,因为若干元素已经出队了。

那么解决办法是:只要frontback到达数组的尾端,它又绕回了开头,这叫做循环数组。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值