【Java程式設計】使用Java模擬C/C++中的queue佇列

passer__jw767發表於2020-12-01

使用Java語言對C/C++中的佇列進行模擬
最近想要嘗試使用Java實現BFS廣度優先搜尋來解決迷宮問題,但是需要用到C/C++中的佇列,使用Java語言實現佇列模擬的程式碼如下:

//使用陣列模擬佇列——編寫一個ArrayQueue類
class ArrayQueue {
	private int maxSize; // 表示陣列的最大容量
	private int front; // 佇列頭
	private int rear; // 佇列尾
	private int[] arr; // 該陣列用於存放資料

	// 建立佇列的構造器
	public ArrayQueue(int maxSize) {
		this.maxSize = maxSize;
		arr = new int[maxSize];
		front = -1; // 指向佇列頭部(指向的是佇列頭的前一個位置)
		rear = -1;// 指向佇列尾部(指向的是佇列尾的資料)
	}

	// 判斷佇列是否滿
	public boolean isFull() {
		return rear == maxSize - 1;
	}

	// 判斷佇列是否為空
	public boolean isEmpty() {
		return rear == front;
	}

	// 新增資料到佇列
	public void addQueue(int n) {
		// 判斷佇列是否滿
		if (isFull()) {
			System.out.println("佇列滿,不能加入資料");
			return;
		}
		rear++;// 讓rear後移
		arr[rear] = n;
	}

	// 獲取佇列的資料
	public int getQueue() {
		// 判斷佇列是否空
		if (isEmpty()) {
			// 丟擲異常
			throw new RuntimeException("佇列空,不能取出資料");
		}
		front++;// 讓front後移
		return arr[front];
	}

	// 顯示佇列的所有資料
	public void showQueue() {
		// 遍歷
		if (isEmpty()) {
			System.out.println("佇列為空");
			return;
		}
		for (int i : arr) {
			System.out.printf("%d\t", i);
		}
	}
}

提供測試程式碼:

public static void main(String[] args) {
		// 建立一個佇列,這裡初始化佇列大小為3
		ArrayQueue arrayQueue = new ArrayQueue(3);
		int key;// 接收使用者輸入
		Scanner sc = new Scanner(System.in);
		boolean loop = true;
		// 輸出一個選單
		while (loop) {
			System.out.println();
			System.out.println("1:顯示佇列");
			System.out.println("2:新增資料到佇列");
			System.out.println("3:從佇列獲取資料");
			key = sc.nextInt();// 接收一個字元
			switch (key) {
			case 1:
				arrayQueue.showQueue();
				break;
			case 2:
				System.out.println("輸入一個數:");
				int value = sc.nextInt();
				arrayQueue.addQueue(value);
				break;
			case 3:
				try {
					int res = arrayQueue.getQueue();
					System.out.println("取出的資料是:" + res);
				} catch (Exception e) {
					System.out.println(e.getMessage());
				}
				break;
			}
		}
	}

相關文章