1、引入java
2、隊列數組
思路分析:上圖front指向隊列的頭部,rear指向隊列的尾部。當有數據輸入時,隊列的頭部不懂,尾部向上移,當rear = maxSize - 1 時,隊列滿,沒法再加入數據;當有數據 輸出時,隊列的尾部不動,頭部上移,也就是取出先加入的數據,再取出後加入的數據,當 rear = front 時,隊列空,此時沒法再取出數據。用數組模擬隊列時front 和 rear 均初始 化爲-1。 ide
3、代碼實現隊列添加和取出數據oop
import java.util.Scanner; public class ArrayQueueDemo { public static void main(String[] args) { // 測試一把 //建立一個隊列 ArrayQueue arrayQueue = new ArrayQueue(3); char key = ' '; //接收用戶輸入 Scanner scanner = new Scanner(System.in); //掃描器 boolean loop = true; // 輸出一個菜單 while(loop) { System.out.println("s(show):顯示隊列"); System.out.println("e(exit):退出程序"); System.out.println("a(add):添加數據到隊列"); System.out.println("g(get):從隊列取出數據"); System.out.println("h(head):查看隊列頭的數據"); key = scanner.next().charAt(0);//接收一個字符 switch (key) { case 's': arrayQueue.showQueue(); break; case 'a': System.out.println("請輸入一個數據:"); int value = scanner.nextInt(); arrayQueue.addQueue(value); break; case 'g': try { int res = arrayQueue.getQueue(); System.out.printf("取出的數據爲:%d\n",res); }catch(Exception e) { System.out.println(e.getMessage()); } break; case 'h': try { int res = arrayQueue.headQueue(); System.out.printf("隊列頭的數據爲:%d\n",res); }catch(Exception e) { System.out.println(e.getMessage()); } break; case 'e': scanner.close(); loop = false; System.out.println("程序退出"); break; } } } } //使用數組模擬隊列-編寫一個ArrayQueue類 class ArrayQueue{ private int maxSize; //表示數組的最大容量 private int front; //隊列頭 private int rear; //隊列尾 private int[] arr; //該數組用於存放數據,模擬隊列 //建立隊列的構造器 public ArrayQueue(int arrMaxSize) { maxSize = arrMaxSize; arr = new int[maxSize]; front = -1; //指向隊列頭部,front是指向隊列頭的前一個位置 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 = front+1 ; i < rear + 1; i++) { System.out.printf("arr[%d] = %d\n", i,arr[i]); } } //顯示隊列的頭數據,注意不是取出數據 public int headQueue() { if(isEmpty()) { throw new RuntimeException("隊列空的,沒有數據"); } return arr[front+1]; } }
4、問題分析及解決測試
用數組模擬隊列會存在一個問題:當存入數據,並將數據取出後,發現數組沒法再從新存入數據,即數組沒法被複用。所以下一篇會講講數組當作是環形的,構建一個環形隊列,以達到複用的目的。spa