數組實現環形隊列


數據結構為

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]);
		}
	}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM