中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中如何實現隊列數組和鏈表

發布時間:2020-06-23 11:00:12 來源:億速云 閱讀:163 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關java中如何實現隊列數組和鏈表,文章內容質量較高,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

隊列的介紹

隊列是一種先進先出(FIFO)的線性的數據結構,隊列的主要操作為入隊和出隊。

隊頭:隊列的出口端,隊尾:隊列的入口端,通常在數組中表示為最后入隊元素的下一個位置。

在用數組實現時,注意:若隊頭不斷有元素出隊,那么隊列的可用空間就會變小,所以我們通常用循環隊列來實現,此時隊尾也可能出現在隊頭的前面。

隊列的數組實現

隊列的數組實現這里的隊列一般都是循環隊列!

特別注意:

(1)隊列滿時的判斷條件為(隊尾下標+1) % 數組長度 = 隊頭下標

(2)隊尾指針指向的位置空出一位,因此隊列最大容量比數組長度小1。

public class MyQueue {
    private int[] array;
    private int front;
    private int rear;
    public MyQueue(int capacity){
        array = new int[capacity];
    }
 
    /*
    入隊時,只需判斷隊列是否已滿,若隊列已滿,則拋出異常,其他情況(包括隊列為空)都正常插入
     */
    public void enQueue(int data) throws Exception{
        if((rear+1) % array.length  == front)
            throw new Exception("隊列已滿,不能入隊!");
        array[rear] = data;
        rear = (rear+1) % array.length;
    }
 
    /*
    出隊時,判斷隊列是否為空,若隊列為空,拋出異常
     */
    public int deQueue() throws Exception{
        if(front == rear)
            throw new Exception("隊列為空,不能出隊!");
        int temp = array[front];
        front = (front+1) % array.length;
        return temp;
    }
 
//    public void output(){
//        for(int i = front; ((i+1) % array.length) <= rear; i++){
//一直在循環輸出,嚴重錯誤!不能把取模判斷語句寫在條件里面!
//            i %= array.length;
//            System.out.println(array[i]);
//        }
//    }
 
    public void output(){
        for(int i = front; i != rear; i = (i+1) % array.length){
            System.out.println(array[i]);
        }
    }
    public static void main(String[] args) throws Exception{
        MyQueue myQueue = new MyQueue(5);//長度為5的隊列只能插入4個元素
        myQueue.enQueue(1);
        myQueue.enQueue(3);
        myQueue.enQueue(2);
        myQueue.enQueue(4);
        myQueue.deQueue();
        myQueue.deQueue();
        myQueue.enQueue(5);
        myQueue.enQueue(6);
        myQueue.output();
    }
 
}

隊列的鏈表實現

隊列用鏈表實現時,用頭指針指向隊列的第一個節點,用尾指針指向隊列的最后一個節點。

public class MyQueue_LinkList {
    private static class Node{
        int data;
        Node next;
        Node(int data){
            this.data = data;
        }
    }
 
    private Node front;
    private Node rear;
    private int size;//隊列中實際元素的個數
    private int maxsize;
 
    public MyQueue_LinkList(int capacity){
        maxsize = capacity;
    }
 
    public void enQueue(int data) throws Exception{
        if(size >= maxsize)
            throw new Exception("隊列已滿,無法入隊");
        Node insertedNode = new Node(data);
        if(size == 0){
            front = insertedNode;
            rear = insertedNode;
        }
        else{
            rear.next = insertedNode;
            rear = insertedNode;
        }
        size++;
    }
 
    public int deQueue() throws Exception{
        if(front == null)
            throw new Exception("隊列為空,無法出隊!");
        int temp;
        if(front == rear)//隊列中只有一個節點
            rear = null;
        temp = front.data;
        front = front.next;
        size--;
        return temp;
    }
 
    public void output(){
        Node temp = front;
        for(int i = 0 ; i < size; i++){
            System.out.println(temp.data);
            temp = temp.next;
        }
    }
 
    public static void main(String[] args) throws Exception{
        MyQueue_LinkList myQueue_linkList = new MyQueue_LinkList(5);
        myQueue_linkList.enQueue(1);
        myQueue_linkList.enQueue(3);
        myQueue_linkList.enQueue(2);
        myQueue_linkList.deQueue();
        myQueue_linkList.deQueue();
        myQueue_linkList.enQueue(5);
        myQueue_linkList.enQueue(7);
        myQueue_linkList.output();
 
    }
}

隊列的應用場景

(1)銀行排隊,先來先服務。

(2)多線程中,爭奪公平鎖的等待隊列,就是按照訪問順序來決定線程在隊列中的次序的。

(3)網絡爬蟲實現網站抓取,就是把待抓取的網站URL存入隊列中,再按照存入隊列的順序來依次抓取和解析。

以上就是java中實現隊列數組和鏈表的方法,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注億速云行業資訊,感謝各位的閱讀。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玛沁县| 孙吴县| 洛宁县| 正定县| 土默特左旗| 长武县| 随州市| 进贤县| 印江| 宝鸡市| 深圳市| 凌源市| 永宁县| 公安县| 肃宁县| 安丘市| 鄢陵县| 比如县| 东宁县| 广水市| 东方市| 大关县| 富蕴县| 内丘县| 福安市| 南靖县| 宜昌市| 汝州市| 齐齐哈尔市| 海口市| 溆浦县| 越西县| 双牌县| 清水河县| 涿州市| 宣威市| 称多县| 清新县| 杨浦区| 永福县| 苗栗市|