使用数组实现环形队列

使用数组实现环形队列

class CircleQueue{
	private int maxSize;
	private int front;//0
	private int rear;//0
	private int arr[];
	
	public CircleQueue(int maxSize) {
		this.maxSize = maxSize+1;//因为空出来一个,所以环形队列容量比maxSize少一个
		arr = new int[maxSize+1];
	}
	
	public boolean isEmpty() {
		return rear == front;
	}
	
	public boolean isFull() {
		return (rear +1 )%maxSize == front;
	}
	
	public void add(int num) {
		if(isFull()) {
			System.out.println("full");
			return;
		}
		arr[rear] = num;//从后往前加
		rear = (rear + 1) % maxSize;//后指针后移一位
	}
	public int get() {
		if(isEmpty()) {
			throw new RuntimeException("empty");
		}
		int value = front;
		front = (front + 1) % maxSize;
		return arr[value];//从前边取
	}
	
	public int validNum() {
		return (rear + maxSize - front) % maxSize;//有效值的个数
	}
	
	public void showValue() {
		if(isEmpty()) {
			System.out.println("empty");
			return;
		}
		for(int i=front; i < (validNum() + front); i++) {
			System.out.println(arr[i % maxSize]+" ");
		}
	}
}

public class Test {

public static void main(String[] args) {
	CircleQueue circleQueue = new CircleQueue(5);
	circleQueue.add(1);
	circleQueue.add(2);
	circleQueue.add(2);
	circleQueue.add(2);
	circleQueue.add(3);
	circleQueue.get();
	circleQueue.get();
	circleQueue.get();
	circleQueue.get();
	circleQueue.get();

	circleQueue.add(0);
	circleQueue.add(0);
	circleQueue.showValue();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值