Queue – 隊列

一、隊列的概述

隊列(queue)是一種常見的, 先進先出 (FIFO, First-In-First-Out)的數據結構, 在隊尾插入元素,在隊頭刪除元素。

隊列可以應用於: 線程任務調度、廣度優先搜索、消息隊列等場景,是一種非常重要的數據結構。

二、隊列的實現

隊列的實現可以基於鏈表(linked list)或數組(array)來實現,鏈表實現隊列更加靈活方便,數組實現的隊列有著更好的性能表現。

三、隊列的操作

1、隊列的初始化

    
        #include
        #include

        using namespace std;

        int main(){
            queue q; // 初始化一個空隊列
            return 0;
        }
    

2、隊列的插入操作

1) push()

在隊列的末尾插入一個元素,時間複雜度為O(1)。

    
        queue q;
        q.push(1);    // 像隊尾插入元素
        q.push(2);
        q.push(3);
    
2) emplace()

emplace()函數根據傳入的參數構造一個新元素,將其插入隊列的末尾。但emplace()與push()不同的是,emplace()避免了額外的構造函數和複製操作。

    
        struct Person{
            string name;
            int age;

            Person(string n, int a):name(n),age(a){}
        };

        queue q;
        q.emplace("Tom", 18);    // 在隊列末尾插入一個Person類型的對象
    

3、隊列的刪除操作

1) pop()

隊列的頭部元素出隊,時間複雜度為O(1)。

    
        queue q;
        q.push(1);
        q.push(2);
        q.push(3);
        q.pop();    // 彈出隊頭元素
    

4、隊列的查詢操作

1) front()

獲取隊列的頭部元素,時間複雜度為O(1)。

    
        queue q;
        q.push(1);
        q.push(2);
        q.push(3);
        int x = q.front();    // 獲取隊頭元素
    
2) empty()

判斷隊列是否為空,時間複雜度為O(1)。

    
        queue q;
        if(q.empty()){    // 判斷隊列是否為空
            cout << "Queue is empty." << endl;
        }
    
3) size()

返回隊列中元素的個數,時間複雜度為O(1)。

    
        queue q;
        q.push(1);
        q.push(2);
        q.push(3);
        int n = q.size();    // 獲取隊列中元素個數
    

四、隊列的應用場景

1、線程任務調度

在多線程編程中,通過隊列來存儲任務,從而實現任務的先進先出調度。

2、廣度優先搜索

在圖論演算法中,廣度優先搜索(Breadth First Search, BFS)就是通過隊列實現的。

3、消息隊列

在計算機網路中,消息隊列(Message Queue)是一種非同步通信機制,通過隊列將消息從一個應用傳遞到另一個應用。

原創文章,作者:OHPJR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330622.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OHPJR的頭像OHPJR
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相關推薦

  • Python中的隊列定義

    本篇文章旨在深入闡述Python中隊列的定義及其應用,包括隊列的定義、隊列的類型、隊列的操作以及隊列的應用。同時,我們也會為您提供Python代碼示例。 一、隊列的定義 隊列是一種…

    編程 2025-04-29
  • RabbitMQ和Yii2的消息隊列應用

    本文將探討RabbitMQ和Yii2之間的消息隊列應用。從概念、安裝和配置、使用實例等多個方面詳細講解,幫助讀者了解和掌握RabbitMQ和Yii2的消息隊列應用。 一、Rabbi…

    編程 2025-04-29
  • Python queue長度用法介紹

    本文將從多個方面詳細闡述Python queue長度問題,包括隊列長度的定義、如何獲取隊列長度、隊列滿時如何處理以及常見的隊列長度問題。同時,本文也會提供完整的Python代碼示例…

    編程 2025-04-28
  • Java DelayQueue:實現延遲任務的線程安全隊列

    一、DelayQueue的概述 Java的DelayQueue 是一個阻塞隊列隊列,主要用來實現對延遲任務的調度,也就是在指定的時間之後才能夠取出任務來執行。該隊列中保存的元素都必…

    編程 2025-04-23
  • Kafka死信隊列詳解

    一、死信隊列是什麼? 死信隊列(Dead Letter Queue),簡稱DLQ,是一種用於緩存消息處理異常的隊列,通常用於處理那些因為某種原因無法被消費者消費的消息。 在Kafk…

    編程 2025-04-12
  • Kafka 3.4 —— 大數據處理中的核心消息隊列

    隨著大數據和雲計算時代的來臨,消息隊列作為重要的非同步通信方式,成為了處理大量數據的關鍵之一。Kafka 3.4 作為大數據處理的中心組件,具有高可靠性、高吞吐量等特點,被廣泛的應用…

    編程 2025-04-12
  • 深入理解freertos消息隊列

    一、消息隊列的概念和作用 消息隊列是一種在任務之間傳遞信息的方式。FreeRTOS中的消息隊列允許通過發送和接收消息來在任務之間進行通信,從而實現任務合作解決問題。 消息隊列最大的…

    編程 2025-04-12
  • NSQ消息隊列詳解

    一、NSQ消息隊列適用 NSQ是一個分散式消息傳遞平台,它是一個高效的、易於擴展的消息傳遞解決方案。由於其優異的性能和可靠的消息傳遞,NSQ消息隊列被廣泛應用於互聯網應用程序、大數…

    編程 2025-02-24
  • RocketMQ延時隊列詳解

    一、延時隊列介紹 延時隊列,在分散式系統中經常被使用,可以很好的解決延遲任務問題。RocketMQ中提供了延時隊列的功能。 二、RocketMQ延時隊列實現 RocketMQ是通過…

    編程 2025-02-15
  • 深入掌握STL Queue

    STL中的queue是一個標準模板庫容器,能夠快速有效地存儲和處理數據,是日常編程開發中非常常用的數據結構之一。本篇文章將從多個方面對STL queue進行詳細的闡述。 一、基本概…

    編程 2025-02-05

發表回復

登錄後才能評論