环形队列

环形队列

优点:高复用

思路:
定义一个头指针front,指向队列中的第一个元素,初始值 front=0;
定义一个尾指针rear,指向队列的最后一个元素的后一个位置,即预留出一个空闲位置,构成环形,初始值rear=0;
队列空:front==rear;
队列满:(rear+1)% maxSize == front;
队列中的有效数据个数:(maxSize+rear-front)% maxSize;

代码实现

private int maxSize;	//队列的最大容量
	private int front;		//队列的第一个元素
	private int rear;		//队列的最后一个元素的后一个位置,即指向的位置是预留出来的位置,空出来构成环形
	private int queueArray[];		//环形队列
	
	//初始化队列
	public loopQueueArray(int maxSize) {
		this.maxSize = maxSize;
		queueArray = new int[this.maxSize];
		rear = 0;
		front = 0;
	}
	
	/**
	 * 判断队列是否为空
	 */
	public boolean isNull() {
		return rear == front;
	}
	
	/**
	 * 判断队列是否已满
	 */
	public boolean isFull() {
		return (rear+1)%maxSize == front;
	}
	
	/**
	 * 添加队列元素
	 */
	public void addQueue(int number) {
		//判断队列容量是否已满
		if(isFull()) {
			System.out.println("\n已达到最大存储容量,无法在继续添加\n");
			return;
		}
		queueArray[rear] = number;
		rear = (rear+1)%maxSize;
	}
	
	/**
	 * 出队列的元素
	 */
	public int getQueue() {
		//判断队列是否为空
		if(isNull()) {
			throw new RuntimeException("队列中没有元素");
		}
		//定义临时变量,存储取出的值,再操作front
		int temp = queueArray[front];
		front = (front+1)%maxSize;
		return temp;
	}
	
	/**
	 * 显示队列中的元素
	 */
	public void showAllQueue() {
		//判断队列是否为空
		if(isNull()) {
			System.out.println("\n队列中没有元素\n");
			return;
		}
		System.out.println();
		//确定队列中有几个有效元素:rear
		for(int i=front;i<front+(maxSize-front+rear)%maxSize;i++) {
			System.out.println("queueArray["+(i%maxSize)+"]="+queueArray[i%maxSize]);
		}
		System.out.println();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值