java實現循環隊列


別的不多說直接上代碼:

class CircleArray{
	private int maxSize; // 表示數組的最大容量
	//front 變量的含義做一個調整: front 就指向隊列的第一個元素, 也就是說 arr[front] 就是隊列的第一個元素 
	//front 的初始值 = 0
	private int front; 
	//rear 變量的含義做一個調整:rear 指向隊列的最后一個元素的后一個位置. 因為希望空出一個空間做為約定.
	//rear 的初始值 = 0
	private int rear; // 隊列尾
	private int[] arr; // 該數據用於存放數據, 模擬隊列
	
	public CircleArray(int maxSize) {
		this.maxSize = maxSize;
		arr = new int[maxSize];
	}
	//判斷是否隊滿
	public boolean isFull() {
		return (rear + 1) % maxSize == front;
	}
	//是否對空
	public boolean isEmpty() {
		return rear == front;
	}
	//添加數據到隊列
	public void addQueue(int e) {
		//判斷是否隊滿
		if(isFull()) {
			throw new RuntimeException("隊列滿,插入失敗..");
		}
		
		arr[rear] = e;
		//將rear 后移
		rear = (rear+1)%maxSize;
	}
	//出隊列
	public int getQueue() {
		if(isEmpty()) {
			throw new RuntimeException("隊列空,操作失敗。。");
		}
		//front 指向隊列的第一個元素
		int value = arr[front];
		front = (front + 1 ) % maxSize;
		return value;
	}
	//獲取有效的數據個數
	public int size() {
		return  (rear + maxSize - front) % maxSize;   
	}
	
	// 顯示隊列的所有數據
	public void showQueue() {
		// 遍歷
		if (isEmpty()) {
			System.out.println("隊列空的,沒有數據~~");
			return;
		}
		// 思路:從front開始遍歷,遍歷多少個元素
		// 動腦筋
		for (int i = front; i < front + size() ; i++) {
			System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]);
		}
	}
	//顯示隊列的頭數據, 注意不是取出數據
	public int getHeader() {
		if(isEmpty()) {
			throw new RuntimeException("隊列為空...");
			
		}
		return arr[front];
	}

  


免責聲明!

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



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