隊列:java
1,隊列是一種先進先出的線性表,它只容許在表的一段進行插入,而在另外一端刪除元素,在隊列中,容許插入的一段叫作隊尾(rear),容許刪除的一端則稱爲隊頭。數組
2,舉例:
①銀行叫號排隊
②操做系統中的做業排隊:在容許多道程序運行的操做系統中,同時有幾個做業運行,若是運行的結果都須要用通道輸出,那就要按請求輸出的前後次序排隊。每當通道傳輸完畢能夠接受新的輸出任務時,隊頭的做業先從隊列中推出做輸出操做。凡是申請輸出的做業都從隊尾進入隊列ide
3,數組模擬隊列示意圖:
4,數組模擬隊列思路:oop
首先,如上圖所示:操作系統
MaxSize是該隊列的最大容量
由於隊列的輸入輸出分別從兩端進行,所以用兩個變量front和rear分別記錄兩端的下標,front會隨着數據輸出而改變,rear會隨着數據輸入而改變
當咱們將數據存入隊列時,rear+1,若是rear==front,則說明隊列爲空;若是rear==MaxSize-1,則說明隊列已滿
5,代碼實現code
package com.boogie.QueueArr; import java.util.Scanner; public class QueueArr { public static void main(String[] args) { ArrQueue queue=new ArrQueue(3); char key=' '; Scanner scan=new Scanner(System.in); boolean loop=true; while(loop) { System.out.println("s(show):顯示隊列"); System.out.println("a(add):添加數據到隊列"); System.out.println("g(get):從隊列取出數據"); System.out.println("h(head):查看隊列頭的數據"); System.out.println("e(exit):退出程序"); key=scan.next().charAt(0); switch(key) { case's': queue.showQueue(); break; case'a': System.out.println("請輸入一個數字:"); int value=scan.nextInt(); queue.addQueue(value); break; case'g': try { int res=queue.getQueue(); System.out.printf("取出的數據是%d\n",res); } catch (Exception e) { System.out.println(e.getMessage()); } break; case'h': try { int res=queue.headQueue(); System.out.printf("隊列頭的數據是:%d\n",res); } catch (Exception e) { System.out.println(e.getMessage()); } break; case'e': scan.close(); loop=false; break; default: break; } } System.out.println("程序退出~~"); } } //使用數組模擬隊列——編寫一個QueueArr類 class ArrQueue{ private int Maxsize;//表示數組的最大容量 private int front;//隊列頭 private int rear;//隊列尾 private int[] Arr;//用於存放數據 //建立隊列的構造器 public ArrQueue(int ArrMaxsize) { Maxsize=ArrMaxsize; Arr=new int[Maxsize]; front=-1; rear=-1; } //判斷隊列是否滿 public boolean QueueisFull(){ return rear==Maxsize-1; } //判斷隊列是否空 public boolean QueueisEmpty() { return rear==front; } //添加數據到隊列 public void addQueue(int n) { if(QueueisFull()) { System.out.println("隊列已滿,沒法加入數據"); return; } rear++;//rear後移 Arr[rear]=n; } //獲取隊列數據,出隊列 public int getQueue(){ if(QueueisEmpty()) { throw new RuntimeException("隊列爲空,沒有數據"); } front++; return Arr[front]; } //顯示隊列的全部數據 public void showQueue(){ if(QueueisEmpty()) { System.out.println("隊列爲空,沒有數據"); return; }for(int i=0;i<Arr.length;i++) { System.out.printf("Arr[%d]=%d\n",i,Arr[i]); } } //顯示隊列的頭數據 public int headQueue() { if(QueueisEmpty()) { System.out.println("隊列爲空,沒有數據"); }return Arr[front+1]; } }