国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn),數(shù)據(jù)結構,數(shù)據(jù)結構,java,隊列‘,模擬實現(xiàn)

??隊列(Queue)的概念

隊列:只允許在一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有==先進先出FIFO(FirstIn First Out) ==入隊列:

進行插入操作的一端稱為隊尾(Tail/Rear) 出隊列:

進行刪除操作的一端稱為隊頭(Head/Front)
【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn),數(shù)據(jù)結構,數(shù)據(jù)結構,java,隊列‘,模擬實現(xiàn)

??隊列的使用

在Java中,Queue是個接口,底層是通過鏈表實現(xiàn)的。
【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn),數(shù)據(jù)結構,數(shù)據(jù)結構,java,隊列‘,模擬實現(xiàn)
隊列在使用時有以下方法:
【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn),數(shù)據(jù)結構,數(shù)據(jù)結構,java,隊列‘,模擬實現(xiàn)
注意:Queue是個接口,在實例化時必須實例化LinkedList的對象,因為LinkedList實現(xiàn)了Queue接口。

使用如下:

import java.util.LinkedList;
import java.util.Queue;

public class TestMain {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(1);
        q.offer(2);
        q.offer(3);
        q.offer(4);
        q.offer(5); // 從隊尾入隊列
        System.out.println(q.size());
        System.out.println(q.peek()); // 獲取隊頭元素
        q.poll();
        System.out.println(q.poll()); // 從隊頭出隊列,并將刪除的元素返回
        if(q.isEmpty()){
            System.out.println("隊列空");
        }else{
            System.out.println(q.size());
        }
    }
}

運行結果如下:
【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn),數(shù)據(jù)結構,數(shù)據(jù)結構,java,隊列‘,模擬實現(xiàn)

??隊列的模擬實現(xiàn)

隊列中既然可以存儲元素,那底層肯定要有能夠保存元素的空間,通過前面線性表的學習了解到常見的空間類型有兩種:順序結構 和 鏈式結構。

這里博主為大家演示一個雙鏈表模擬實現(xiàn)隊列

??創(chuàng)建隊列

其實就是創(chuàng)建一個雙鏈表,這里就不做過多贅述了,實現(xiàn)如下:

    public static class ListNode {
        ListNode next;
        ListNode prev;
        int value;

        ListNode(int value) {
            this.value = value;
        }
    }

    ListNode first; // 隊頭
    ListNode last; // 隊尾
    int size = 0;

??入隊列

向雙向鏈表位置插入新節(jié)點,做法如下:

  • 創(chuàng)建一個節(jié)點newNode接收傳進來的元素
  • 判斷該隊列是否為null
  • 若為null,則該元素就是隊頭
  • 若不為null,則將該元素的前驅節(jié)點設置為last;
  • last的后繼節(jié)點變?yōu)閚ewNode
  • newNode變?yōu)樾碌奈补?jié)點
  • size++

實現(xiàn)如下:

    // 入隊列
    public void offer(int e) {
        ListNode newNode = new ListNode(e);
        if (first == null) {
            first = newNode;
// last = newNode;
        } else {
            last.next = newNode;
            newNode.prev = last;
// last = newNode;
        }
        last = newNode;
        size++;
    }

??出隊列

將雙向鏈表第一個節(jié)點刪除掉,做法如下:

  • 分為幾種情況
  • 當隊列為空時
  • 則直接返回隊列為空的異常,自定義異常如下
public class EmptyException extends RuntimeException{
    public EmptyException() {
    }

    public EmptyException(String message) {
        super(message);
    }
}
  • 當隊列中只有一個元素----鏈表中只有一個節(jié)點時—直接刪除
  • 當隊列中有多個元素—鏈表中有多個節(jié)點----將第一個節(jié)點刪除

實現(xiàn)如下:

    // 出隊列---將雙向鏈表第一個節(jié)點刪除掉
    public int poll() {
// 1. 隊列為空
// 2. 隊列中只有一個元素----鏈表中只有一個節(jié)點---直接刪除
// 3. 隊列中有多個元素---鏈表中有多個節(jié)點----將第一個節(jié)點刪除
        int value = 0;
        if (first == null) {
            throw new EmptyException("隊列為空");
        } else if (first == last) {
            last = null;
            first = null;
        } else {
            value = first.value;
            first = first.next;
            first.prev.next = null;
            first.prev = null;
        }
        --size;
        return value;
    }

??獲取隊頭元素

獲取鏈表中第一個節(jié)點的值域

  • 若隊列為null,拋出異常
  • 若不為null,返回隊頭的元素

實現(xiàn)如下:

    // 獲取隊頭元素---獲取鏈表中第一個節(jié)點的值域
    public int peek() {
        if (first == null) {
            throw new EmptyException("隊列為空");
        }
        return first.value;
    }

??獲取隊列長度

直接返回size就好

實現(xiàn)如下:

   public int size() {
        return size;
    }

??判斷是否為空

直接判斷對頭是否為null,然后返回就好

實現(xiàn)如下:

    public boolean isEmpty(){
        return first == null;
    }

??完整代碼

MyQueue實現(xiàn)如下:

public class MyQueue {
    // 雙向鏈表節(jié)點
    public static class ListNode {
        ListNode next;
        ListNode prev;
        int value;

        ListNode(int value) {
            this.value = value;
        }
    }

    ListNode first; // 隊頭
    ListNode last; // 隊尾
    int size = 0;

    // 入隊列---向雙向鏈表位置插入新節(jié)點
    public void offer(int e) {
        ListNode newNode = new ListNode(e);
        if (first == null) {
            first = newNode;
// last = newNode;
        } else {
            last.next = newNode;
            newNode.prev = last;
// last = newNode;
        }
        last = newNode;
        size++;
    }

    // 出隊列---將雙向鏈表第一個節(jié)點刪除掉
    public int poll() {
// 1. 隊列為空
// 2. 隊列中只有一個元素----鏈表中只有一個節(jié)點---直接刪除
// 3. 隊列中有多個元素---鏈表中有多個節(jié)點----將第一個節(jié)點刪除
        int value = 0;
        if (first == null) {
            throw new EmptyException("隊列為空");
        } else if (first == last) {
            last = null;
            first = null;
        } else {
            value = first.value;
            first = first.next;
            first.prev.next = null;
            first.prev = null;
        }
        --size;
        return value;
    }

    // 獲取隊頭元素---獲取鏈表中第一個節(jié)點的值域
    public int peek() {
        if (first == null) {
            throw new EmptyException("隊列為空");
        }
        return first.value;
    }
    public int size() {
        return size;
    }
    public boolean isEmpty(){
        return first == null;
    }
}

??雙端隊列 (Deque)

雙端隊列(deque)是指允許兩端都可以進行入隊和出隊操作的隊列

deque 是 “double ended queue” 的簡稱。

那就說明元素可以從隊頭出隊和入隊,也可以從隊尾出隊和入隊
【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn),數(shù)據(jù)結構,數(shù)據(jù)結構,java,隊列‘,模擬實現(xiàn)
Deque是一個接口,使用時必須創(chuàng)建LinkedList的對象。
【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn),數(shù)據(jù)結構,數(shù)據(jù)結構,java,隊列‘,模擬實現(xiàn)
在實際工程中,使用Deque接口是比較多的,棧和隊列均可以使用該接口

Deque<Integer> stack = new ArrayDeque<>();//雙端隊列的線性實現(xiàn)
Deque<Integer> queue = new LinkedList<>();//雙端隊列的鏈式實現(xiàn)

?總結

關于《 【數(shù)據(jù)結構】 棧(Stack)與棧的模擬實現(xiàn)》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評指正,如果文章對您有幫助或者覺得作者寫的還不錯可以點一下關注,點贊,收藏支持一下!文章來源地址http://www.zghlxwxcb.cn/news/detail-677683.html

到了這里,關于【數(shù)據(jù)結構】 隊列(Queue)與隊列的模擬實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Golang】實現(xiàn)簡單隊列(Queue)數(shù)據(jù)結構

    ?在計算機科學中,隊列是一種特殊的線性數(shù)據(jù)結構,它遵循FIFO(先進先出)原則。隊列中的元素只能從一端(稱為隊尾或后端)添加,并且只能從另一端(稱為隊頭或前端)移除。這種特性使得隊列在許多算法和數(shù)據(jù)結構中都有廣泛的應用,例如操作系統(tǒng)中的任務調度、網(wǎng)

    2024年01月19日
    瀏覽(25)
  • 【數(shù)據(jù)結構】順序隊列模擬實現(xiàn)

    【數(shù)據(jù)結構】順序隊列模擬實現(xiàn)

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個人主頁 :阿然成長日記 ??點擊可跳轉 ?? 個人專欄: ??數(shù)據(jù)結構與算法??C語言進階 ?? 不能則學,不知則問,恥于問人,決無長進 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 一、隊列的基本概念

    2024年02月10日
    瀏覽(25)
  • 【數(shù)據(jù)結構】隊列-Queue

    【數(shù)據(jù)結構】隊列-Queue

    ? 作者:小胡_不糊涂 ?? 作者主頁:小胡_不糊涂的個人主頁 ?? 收錄專欄:淺談數(shù)據(jù)結構 ?? 持續(xù)更文,關注博主少走彎路,謝謝大家支持 ?? 隊列: 只允許在一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進先出FIFO(FirstIn First Out) 入隊列:

    2024年02月08日
    瀏覽(26)
  • 數(shù)據(jù)結構:隊列Queue詳解

    數(shù)據(jù)結構:隊列Queue詳解

    隊列 :只允許在一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表。進行插入操作的一端稱為 隊尾 ,刪除操作的一端稱 隊頭 。 入隊列 :進行插入操作的一端稱為 隊尾 。 出隊列 :進行刪除操作的一端稱為 隊頭 。 在 Java 中, Queue是個接口,底層是通過鏈表

    2024年02月11日
    瀏覽(25)
  • 【數(shù)據(jù)結構】棧和隊列的模擬實現(xiàn)

    【數(shù)據(jù)結構】棧和隊列的模擬實現(xiàn)

    前言:前面我們學習了單鏈表并且模擬了它的實現(xiàn),今天我們來進一步學習,來學習棧和隊列吧!一起加油各位,后面的路只會越來越難走需要我們一步一個腳?。??? 博主CSDN主頁:衛(wèi)衛(wèi)衛(wèi)的個人主頁 ?? ?? 專欄分類:數(shù)據(jù)結構 ?? ??代碼倉庫:衛(wèi)衛(wèi)周大胖的學習日記?? ??關

    2024年02月05日
    瀏覽(23)
  • 【數(shù)據(jù)結構】隊列的使用|模擬實現(xiàn)|循環(huán)隊列|雙端隊列|面試題

    【數(shù)據(jù)結構】隊列的使用|模擬實現(xiàn)|循環(huán)隊列|雙端隊列|面試題

    1.1 概念 隊列 :只允許在一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進先出FIFO(First In First Out) 入隊列:進行插入操作的一端稱為 隊尾(Tail/Rear) 出隊列:進行刪除操作的一端稱為 隊頭(Head/Front) 隊列和棧的區(qū)別: 隊列是 先進先出(隊

    2024年02月03日
    瀏覽(22)
  • 數(shù)據(jù)結構:隊列(鏈表和數(shù)組模擬實現(xiàn))

    數(shù)據(jù)結構:隊列(鏈表和數(shù)組模擬實現(xiàn))

    目錄 1.何為隊列 2.鏈表模擬實現(xiàn) 2.1 節(jié)點和隊列創(chuàng)建 2.2 初始化隊列 2.3 入隊操作 2.4 出隊操作 2.5 遍歷隊列 2.6 獲取隊首和隊尾元素 2.7 判斷隊列是否為空 2.8 完整實現(xiàn) 3.?數(shù)組模擬實現(xiàn) 3.1 創(chuàng)建隊列 3.2 入隊和出隊操作 3.3 遍歷隊列 3.4 獲取隊首和隊尾元素 ?3.5 判斷隊列是否為空

    2024年02月03日
    瀏覽(26)
  • [數(shù)據(jù)結構 -- C語言] 隊列(Queue)

    [數(shù)據(jù)結構 -- C語言] 隊列(Queue)

    目錄 1、隊列 1.1 隊列的概念及結構 2、隊列的實現(xiàn) 2.1 接口 3、接口的實現(xiàn) 3.1 初始化隊列 3.2 隊尾入隊列 分析: 3.3 隊頭出隊列 分析: 3.4 獲取隊列頭部元素 3.5 獲取隊列尾部元素 3.6 獲取隊列中有效元素個數(shù) 3.7 檢測隊列是否為空 3.7.1 int 類型判空 3.7.2 bool 類型判空 3.8 銷毀隊

    2024年02月07日
    瀏覽(17)
  • 【數(shù)據(jù)結構】棧和隊列的模擬實現(xiàn)(兩個方式實現(xiàn))

    ??作者簡介: 加油,旭杏,目前大二,正在學習 C++ , 數(shù)據(jù)結構 等?? ??作者主頁:加油,旭杏的主頁?? ?本文收錄在:再識C進階的專欄?? ??代碼倉庫:旭日東升 1?? ??歡迎大家點贊 ?? 收藏 ? 加關注哦!?? ???????這一篇博客將學習棧和隊列的相關知識, 棧

    2024年02月05日
    瀏覽(29)
  • 【數(shù)據(jù)結構】隊列篇| 超清晰圖解和詳解:循環(huán)隊列模擬、用棧實現(xiàn)隊列、用隊列實現(xiàn)棧

    【數(shù)據(jù)結構】隊列篇| 超清晰圖解和詳解:循環(huán)隊列模擬、用棧實現(xiàn)隊列、用隊列實現(xiàn)棧

    博主簡介: 努力學習的22級計算機科學與技術本科生一枚?? 博主主頁: @是瑤瑤子啦 每日一言??: 每一個不曾起舞的日子,都是對生命的辜負?!岵???622. 設計循環(huán)隊列 ???? 思路: ??數(shù)據(jù)結構: 使用數(shù)組為數(shù)據(jù)結構,且采用犧牲一個空間的方法來包裝判空和判滿的

    2024年02月11日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包