队列之循环队列

/**
 * 队列:先进先出的特性
 */
package arithmetic;

public class Queue {
	public static void main(String[] args) {
		
		QueueX queuex = new QueueX(5);
		
		queuex.insert(10);
		queuex.insert(20);
		queuex.insert(30);
		queuex.insert(40);
		
		queuex.remove();
		queuex.remove();
		queuex.remove();
		
		queuex.insert(50);
		queuex.insert(60);
		queuex.insert(70);
		queuex.insert(80);
		
		while(!queuex.isEmpty()) {
			long data = queuex.remove();
			System.out.print(data);
			System.out.print("  ");
		}
	}
}

/**
 * 循环队列
 * @author Administrator
 */
class QueueX{
	private long[] dataArr;
	private int front;				//队头指针		
	private int rear;				//队尾指针
	private int items;				//数据项
	private int maxSize;			//<span style="color:#009900;">记录当前已存在的数据项,来确保数据项始终不会因为循环添加数据项而覆盖原来未删除的数据项</span>
	
	public QueueX(int size){
		maxSize = size;
		dataArr = new long[size];
		front = 0;
		rear = -1;
		items = 0;
	}
	
	//插入
	public void insert(long data){
		if (!this.isFull()) 				//判断队列是否已满
			if(rear == maxSize -1)			//如果已经到了队尾,但数据项没有满,那就表明表头已经有数据项被移除,则让指针返回初始化位置
				rear = -1;
			dataArr[++rear] = data;			//赋值数据项给当前位置
			items++;
	}
	
	//移除
	public long remove(){
		long temp = dataArr[front++];
		if(front == maxSize)				//队头指针已经陆续移除数据项到队尾,则重新回归初始位置
			front = 0;
		items--;
		return temp;
	}
	
	//查看
	public long peek(){
		return dataArr[front];
	}
	
	//是否为空
	public boolean isEmpty(){
		return (items == 0);
	}
	
	//是否已满
	public boolean isFull(){
		return (items == maxSize);
	}
	
	//当前数据项大小
	public int size(){
		return items;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值