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

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

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

? 作者:小胡_不糊涂
?? 作者主頁:小胡_不糊涂的個人主頁
?? 收錄專欄:淺談數(shù)據(jù)結構
?? 持續(xù)更文,關注博主少走彎路,謝謝大家支持 ??


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

1.什么是隊列

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

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

2. 隊列的使用

在Java中,Queue是個接口,底層是通過鏈表實現(xiàn)的:
【數(shù)據(jù)結構】隊列-Queue,淺談數(shù)據(jù)結構,數(shù)據(jù)結構

方法 功能
boolean offer(E e) 入隊列
E poll() 出隊列
peek() 獲取隊頭元素
int size() 獲取隊列中有效元素個數(shù)
boolean isEmpty() 檢測隊列是否為空

Queue是個接口,在實例化時必須實例化LinkedList的對象,因為LinkedList實現(xiàn)了Queue接口。

上述方法的實現(xiàn):

import java.util.LinkedList;
import java.util.Queue;
public class Main {
    //方法的實現(xiàn)
    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());
        }
    }
}

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

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

【數(shù)據(jù)結構】隊列-Queue,淺談數(shù)據(jù)結構,數(shù)據(jù)結構
模擬實現(xiàn)隊列:

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

        public ListNode(int val) {
            this.val = val;
        }
    }

    public ListNode head;//隊頭
    public ListNode last;//隊尾
    public int usedSize;//隊列元素個數(shù)

    // 入隊列---向雙向鏈表位置插入新節(jié)點
    public boolean offer(int val) {
        ListNode node = new ListNode(val);
        if(head == null) {
            head = node;
            last = node;
        }else {
            last.next = node;
            node.prev = last;
            last = last.next;
        }
        usedSize++;
        return true;
    }

    // 出隊列---將雙向鏈表第一個節(jié)點刪除掉
    // 1. 隊列為空
    // 2. 隊列中只有一個元素----鏈表中只有一個節(jié)點---直接刪除
    // 3. 隊列中有多個元素---鏈表中有多個節(jié)點----將第一個節(jié)點刪除
    public int poll() {
        if(head == null) {
            return -1;
        }
        int retVal = head.val;
        if(head.next == null) {
            head = null;
            last = null;
            return retVal;
        }
        head = head.next;
        head.prev = null;//第一個節(jié)點刪除
        usedSize--;
        return retVal;
    }

    // 獲取隊頭元素---獲取鏈表中第一個節(jié)點的值域
    public int peek() {
        if(head == null) {
            return -1;
        }
        return head.val;
    }

    public boolean empty() {
        return head == null;
    }

    public int size() {
        return usedSize;

4. 循環(huán)隊列

循環(huán)隊列顧名思義就是首位相連的隊列,自然界中的生產者消費者分解者模型可以使用循環(huán)隊列來描述。而環(huán)形隊列通常使用數(shù)組實現(xiàn)。
【數(shù)據(jù)結構】隊列-Queue,淺談數(shù)據(jù)結構,數(shù)據(jù)結構
數(shù)組下標循環(huán)的小技巧

  1. 下標最后再往后(offset 小于 array.length): index = (index + offset) % array.length
    【數(shù)據(jù)結構】隊列-Queue,淺談數(shù)據(jù)結構,數(shù)據(jù)結構
  2. 下標最前再往前(offset 小于 array.length): index = (index + array.length - offset) %array.length
    【數(shù)據(jù)結構】隊列-Queue,淺談數(shù)據(jù)結構,數(shù)據(jù)結構

如何區(qū)分空與滿?

  1. 通過添加 size 屬性記錄
  2. 保留一個位置
  3. 使用標記
    【數(shù)據(jù)結構】隊列-Queue,淺談數(shù)據(jù)結構,數(shù)據(jù)結構

循環(huán)隊列的實現(xiàn):

class MyCircularQueue {
    public int[] elem;
    public int front;//隊頭
    public int rear;//隊尾
    
    public MyCircularQueue(int k) {
        elem = new int[k+1];
    }

    //隊尾入隊
    public boolean enQueue(int value) {
        if(isFull()) {
            return false;
        }
        elem[rear] = value;
        rear = (rear+1) % elem.length;
        return true;
    }
    
    //隊頭出隊
    public boolean deQueue() {
        if(isEmpty()) {
            return false;
        }
        front = (front+1) % elem.length;
        return true;
    }
    //得到隊頭元素
    public int Front() {
        if(isEmpty()) {
            return -1;
        }
        return elem[front];
    }
    //得到隊尾元素
    public int Rear() {
        if(isEmpty()) {
            return -1;
        }
        int index = (rear == 0) ? elem.length-1 : rear-1;
        return elem[index];
    }

    public boolean isEmpty() {
        return front == rear;
    }

    public boolean isFull() {
        return (rear+1)%elem.length == front;
    }
}

5. 雙端隊列(Deque)

**雙端隊列(deque)**是指允許兩端都可以進行入隊和出隊操作的隊列。【數(shù)據(jù)結構】隊列-Queue,淺談數(shù)據(jù)結構,數(shù)據(jù)結構
Deque是一個接口,使用時必須創(chuàng)建LinkedList的對象:

【數(shù)據(jù)結構】隊列-Queue,淺談數(shù)據(jù)結構,數(shù)據(jù)結構
在實際工程中,使用Deque接口是比較多的,棧和隊列均可以使用該接口:文章來源地址http://www.zghlxwxcb.cn/news/detail-713322.html

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

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

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

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

相關文章

  • Java 數(shù)據(jù)結構之隊列(Queue)詳解

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

    目錄 1、在Java中有哪些常見的隊列? 2、Queue 接口分析 3、Deque 接口分析 4、PriorityQueue 的實現(xiàn)原理詳解 5、使用Java數(shù)組實現(xiàn)隊列的簡單示例 1、在Java中有哪些常見的隊列? ????????在Java中,有一些常見的隊列實現(xiàn)。下面是其中一些的列舉: //隊列也是一種線性的數(shù)據(jù)結構

    2024年02月15日
    瀏覽(23)
  • 【Golang】實現(xiàn)簡單隊列(Queue)數(shù)據(jù)結構

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

    2024年01月19日
    瀏覽(25)
  • 隊列(Queue):先進先出(FIFO)的數(shù)據(jù)結構

    隊列(Queue):先進先出(FIFO)的數(shù)據(jù)結構

    隊列是一種基本的數(shù)據(jù)結構,用于在計算機科學和編程中管理數(shù)據(jù)的存儲和訪問。隊列遵循先進先出(First In, First Out,F(xiàn)IFO)原則,即最早入隊的元素首先出隊。這種數(shù)據(jù)結構模擬了物理世界中的隊列,如排隊等待服務的人。 在本篇博客中,我們將詳細介紹隊列的概念、用途

    2024年02月05日
    瀏覽(20)
  • 【數(shù)據(jù)結構與算法】7、隊列(Queue)的實現(xiàn)【用棧實現(xiàn)隊列】

    【數(shù)據(jù)結構與算法】7、隊列(Queue)的實現(xiàn)【用棧實現(xiàn)隊列】

    ?? 隊列 (Queue)是一種特殊的 線性表 , 只能在頭尾兩端進行操作 ?? 隊尾(rear):只能從 隊尾添加 元素,一般叫做 enQueue , 入隊 ?? 隊頭(front):只能從 隊頭移除 元素,一般叫做 deQueue , 出隊 ?? 先進先出 的原則, F irst I n F irst O ut, FIFO ?? 隊列內部的實現(xiàn)可

    2024年02月12日
    瀏覽(25)
  • 【數(shù)據(jù)結構】棧和隊列超詳解!(Stack && Queue)

    【數(shù)據(jù)結構】棧和隊列超詳解!(Stack && Queue)

    棧 :一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數(shù)據(jù)插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的數(shù)據(jù)元素遵守后進先出LIFO(Last In First Out)的原則 壓棧 : 棧的插入操作叫做進棧/壓棧/入棧,入數(shù)據(jù)在棧頂。 出棧 : 棧的刪除操

    2024年02月04日
    瀏覽(30)
  • 數(shù)據(jù)結構入門到入土——棧(Stack)和隊列(Queue)

    數(shù)據(jù)結構入門到入土——棧(Stack)和隊列(Queue)

    目錄 一,棧(Stack) 1.1 概念 1.2 棧的使用 1.3 棧的模擬實現(xiàn) 1.4 棧的應用場景 1.5 棧,虛擬機棧,棧幀有什么區(qū)別? 二,隊列(Queue) 2.1 概念 2.2 隊列的使用 ?2.3 隊列模擬實現(xiàn) 2.4 循環(huán)隊列 三,雙端隊列 棧 :一種特殊的線性表,其 只允許在固定的一端進行插入和刪除元素操

    2024年02月02日
    瀏覽(21)
  • Java 【數(shù)據(jù)結構】 棧(Stack)和隊列(Queue)【神裝】

    Java 【數(shù)據(jù)結構】 棧(Stack)和隊列(Queue)【神裝】

    ? 登神長階 ?第三神裝 S tack ? ?第四神裝?Queue ?? 目錄 ??一.棧 Stack ??1.概念 ???2.基本操作? ???3.相關OJ題?? ???4.棧、虛擬機棧和棧幀的區(qū)別 ??二.隊列 Queue ???1.概念 ??2.基本操作 ??三.總結與反思 ????????在 Java 中,棧(Stack)是一種后進先出(LIFO)的數(shù)

    2024年04月27日
    瀏覽(27)
  • 【數(shù)據(jù)結構與算法】C++的STL模板(迭代器iterator、容器vector、隊列queue、集合set、映射map)以及算法例題

    【數(shù)據(jù)結構與算法】C++的STL模板(迭代器iterator、容器vector、隊列queue、集合set、映射map)以及算法例題

    更多算法例題鏈接: 【數(shù)據(jù)結構與算法】遞推法和遞歸法解題(遞歸遞推算法典型例題) 什么是迭代器(iterator) 迭代器(iterator)的定義: 迭代器是一種檢查容器內元素并遍歷元素的數(shù)據(jù)類型。 迭代器提供對一個容器中的對象的訪問方法,并且定義了容器中對象的范圍。 容器

    2024年04月14日
    瀏覽(30)
  • 數(shù)據(jù)結構之Queue的實現(xiàn)

    方法名 參數(shù) 功能 返回 Size void 返回鏈表規(guī)模(該方法由List T派生而來) empty void 返回鏈表是否為空(該方法由List T派生而來) front void 返回隊首數(shù)據(jù)域的引用 enqueue T const e 入隊 void dequeue void 出隊 出隊的對象

    2024年02月15日
    瀏覽(18)
  • 【LeetCode】設計數(shù)據(jù)結構 | List、Stack、Queue、DLinkedList

    設計鏈表(中等) 707. 設計鏈表 冗余版 代碼復用簡化版 用棧實現(xiàn)隊列(簡單) 232. 用棧實現(xiàn)隊列 用隊列實現(xiàn)棧(簡單) 225. 用隊列實現(xiàn)棧 方法一:雙隊列實現(xiàn) 方法二:單隊列實現(xiàn) 設計循環(huán)隊列(中等) 622. 設計循環(huán)隊列 使用數(shù)組實現(xiàn) 使用鏈表實現(xiàn) 設計循環(huán)雙端隊列(中

    2024年02月14日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包