数组实现环形队列

数据结构为

class CircleArray{
	private int front;
	
	private int rear;
	
	private int maxSize;
	
	private int[] arrays;
	
	public CircleArray(int maxSize) {
		this.maxSize = maxSize;  //队列的长度,比实际队列应用空间大1
		arrays = new int[maxSize];
		front = 0; //指向队列第一个元素
		rear = 0; //指向队列最后一个元素的后一个位置,因此需要队列预留一个空间,所以呢数组最大空间要比实际应用大
	}
}

 判断队列是否已经满了

 

	public boolean isFull() {
		//这里是判断rear是否在预留位置上。也可以用(front-1+maxSize)%maxSize==rear进行判断,
		//预留位置可以理解为(front+队列实际空间)%maxSize的后一个位置,上面的(-1+maxSize)为队列实际空间
		return (rear+1)%maxSize ==front;
	}  

 

 判断队列是否为空

public boolean isEmpty() {
		return rear==front;
	}

  向队列添加数据

	public void addQueue(int n) {
		if(isFull()) {
			System.out.println("队列已近满了,不能加入数据");
			return;
		}
		arrays[rear] = n;
		rear = (rear+1)%maxSize;
	}

  从队列取出数据

	public int getQueue() {
		if(isEmpty()) {
			throw new RuntimeException("队列为空,不能取出数据");
		}
		int result = arrays[front];
		front = (front+1)%maxSize;
		return result;
	}

  队列里面数据个数public int size() {

		//这里可以这么理解
          //当rear>front的时候 其实rear-front就是队列里面的数据个数
          
          //当rear<front的时候,rear+(maxSize-front)就是队列里面的数据个数 return (rear-front+maxSize)%maxSize; }

  显示队列

public void show() {
		if(isEmpty()) {
			System.out.println("队列为空。。。。");
			return ;
		}
		int size = size();
		for(int i=front;i<front+size;i++) {
			System.out.printf("a[%d] = %d\n",i%maxSize,arrays[i%maxSize]);
		}
	}

  

 

posted @ 2019-06-28 17:33  胡叔叔  阅读(1780)  评论(0编辑  收藏  举报