用數組模擬隊列

隊列: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]; 

    }
}
相關文章
相關標籤/搜索