deque底層數據結構以及和queue的異同

文章目錄

    • 底層數據結構原理
      • 關鍵組成部分
      • 操作效率
      • 與其他容器的對比
      • 適用場景
      • C++ STL中的實現細節
      • 總結
    • deque和queue的異同
      • 相同點
      • 不同點

deque(雙端隊列)是一種具有高效兩端插入和刪除操作的數據結構,常見于C++標準庫(STL)和其他編程語言中。它的底層實現結合了數組和鏈表的優勢,既支持高效的隨機訪問,又能在兩端快速插入/刪除元素。

底層數據結構原理

deque 的核心思想是分段連續存儲

  • 使用多個固定大小的(通常是數組)存儲元素。
  • 這些塊通過一個中控器(通常是指針數組)連接,形成邏輯上的連續序列。

在這里插入圖片描述

關鍵組成部分

  1. 中控器(Map)

    • 一個動態分配的數組,每個元素是指向數據塊的指針。
    • 當需要擴展容量時,中控器會重新分配并調整指針。
  2. 數據塊(Buffer)

    • 固定大小的連續內存塊(數組),存儲實際元素。
    • 每個塊的大小通常是編譯時確定的(如C++ STL中默認大小為512字節)。
  3. 迭代器(Iterator)

    • 智能指針,封裝了當前元素在哪個塊、塊內的偏移量等信息。
    • 通過重載運算符(如 ++, --, [])實現透明的隨機訪問。

操作效率

操作時間復雜度說明
兩端插入/刪除O(1)僅需調整中控器和塊內指針
隨機訪問O(1)通過中控器和塊內偏移量直接計算
中間插入/刪除O(n)需要移動元素
內存擴展O(n)重新分配中控器并復制指針

與其他容器的對比

容器隨機訪問兩端插入/刪除中間插入/刪除內存布局
vectorO(1)尾部O(1)*O(n)連續內存
dequeO(1)O(1)O(n)分段連續
listO(n)O(1)O(1)離散節點

*注:vector 尾部插入在需要擴容時為O(n)。

適用場景

  • 需要頻繁在兩端插入/刪除元素(如隊列、棧)。
  • 需要隨機訪問,但插入/刪除操作不集中在中間位置。
  • 避免 vector 擴容時的元素復制開銷。

C++ STL中的實現細節

以下是STL中 deque 的簡化偽代碼,展示其結構:

template<typename T>
class deque {
private:// 中控器:指針數組,每個元素指向一個數據塊T** map;size_t map_size;  // 中控器大小// 數據塊相關size_t block_size;  // 每個塊的元素數量iterator start;     // 指向第一個元素的迭代器iterator finish;    // 指向最后一個元素的下一個位置的迭代器// 迭代器實現(簡化)struct iterator {T** node;       // 當前塊在map中的位置T* cur;         // 當前元素在塊內的指針T* first;       // 塊的起始位置T* last;        // 塊的結束位置// 重載運算符實現隨機訪問iterator& operator++() { /* ... */ }iterator& operator--() { /* ... */ }T& operator*() { return *cur; }// 其他運算符重載...};
};

總結

deque 通過分段連續存儲的方式,平衡了隨機訪問和兩端操作的效率,適合需要高效雙端插入/刪除且偶爾隨機訪問的場景。其實現復雜度高于 vectorlist,但在特定場景下能提供更優的性能。

deque和queue的異同

deque(雙端隊列)和queue(隊列)都是常見的數據結構,它們既有相似之處,也有不同點,以下是具體分析:

相同點

  • 都是線性數據結構:二者都按照元素的先后順序進行存儲和操作,元素之間存在著明確的線性關系。
  • 都支持一定的基本操作:都提供了添加元素和刪除元素的操作,例如在queue中通常有enqueue(入隊)和dequeue(出隊)操作,在deque中也有類似的向隊列兩端添加和刪除元素的操作。

不同點

  • 操作限制
    • queue:遵循先進先出(FIFO)原則,元素只能從隊尾插入,從隊頭刪除,就像現實生活中的排隊一樣,先到的人先接受服務。
    • deque:雙端隊列允許在隊列的兩端進行插入和刪除操作,更加靈活,既可以像棧一樣在一端進行插入和刪除,也可以像隊列一樣在一端插入另一端刪除。
  • 底層實現
    • queue:通常可以用鏈表或者數組來實現。當使用數組實現時,需要考慮數組的擴容和元素的移動等問題;使用鏈表實現時,雖然插入和刪除操作在表頭和表尾的時間復雜度為 O ( 1 ) O(1) O(1),但可能會有一定的空間開銷用于存儲節點的指針。
    • deque:一般采用動態數組或者鏈表來實現。以動態數組實現為例,它可以通過擴展數組的方式來適應元素的增加,并且能夠高效地在兩端進行插入和刪除操作,通常通過維護頭指針和尾指針來確定隊列的邊界。
  • 應用場景
    • queue:常用于需要按照順序處理任務的場景,如消息隊列、任務調度等。例如,在一個多線程的應用程序中,任務可以被放入一個隊列中,然后工作線程按照任務進入隊列的順序依次取出并執行。
    • deque:適用于需要在序列兩端進行頻繁插入和刪除操作的場景。例如,在實現一個文本編輯器的撤銷和重做功能時,可以使用deque來存儲操作歷史,方便在兩端進行操作的添加和刪除。

在C++ 等編程語言中,std::queuestd::deque是標準模板庫(STL)中的容器適配器。std::queue默認基于std::deque實現,當然也可以指定其他容器作為其底層實現,而std::deque是一個獨立的容器,具有雙端操作的功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82698.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82698.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82698.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WordPress 網站上的 jpg、png 和 WebP 圖片插件

核心功能 1. 轉換 AVIF 并壓縮 AVIF 將您 WordPress 網站上的 jpg、png 和 WebP 圖片轉換為 AVIF 格式&#xff0c;并根據您設置的壓縮級別壓縮 AVIF 圖片。如果原始圖片已經是 WordPress 6.5 以上支持的 AVIF 格式&#xff0c;則原始 AVIF 圖片將僅被壓縮。 2. 轉換 WebP 并…

Docker Volumes

Docker Volumes 是 Docker 提供的一種機制&#xff0c;用于持久化存儲容器數據。與容器的生命周期不同&#xff0c;Volumes 可以獨立存在&#xff0c;即使容器被刪除&#xff0c;數據仍然保留。以下是關于 Docker Volumes 的詳細說明&#xff1a; 1. 為什么需要 Volumes&#…

西電 | 2025年擬錄取研究生個人檔案錄取通知書郵寄通知

各位考生&#xff1a; 我校2025年碩士研究生錄取工作已結束&#xff0c;根據相關工作管理規定&#xff0c;現將個人檔案轉調及錄取通知書郵寄信息確認等有關事宜通知如下&#xff1a; 一、個人檔案轉調 &#xff08;郵寄檔案請務必使用EMS&#xff09; 1.全日制考生 錄取類…

ExcelJS庫的使用

ExcelJS 安裝 npm install exceljs新的功能! Merged fix: styles rendering in case when “numFmt” is present in conditional formatting rules (resolves #1814) #1815. Many thanks to andreykrupskii for this contribution!Merged inlineStr cell type support #15…

時空注意力機制深度解析:理論、技術與應用全景

時空注意力機制作為深度學習領域的關鍵技術&#xff0c;通過捕捉數據在時間和空間維度上的依賴關系&#xff0c;顯著提升了時序數據處理和時空建模能力。本文從理論起源、數學建模、網絡架構、工程實現到行業應用&#xff0c;系統拆解時空注意力機制的核心原理&#xff0c;涵蓋…

wxWidgets 3.2.8 發布,修復了GTK下,wxStaticText顯示文本異常的問題

詳細如下&#xff1a; 3.2.8 是穩定的 3.2 系列中的最新維護版本&#xff0c;現已在 GitHub 上提供&#xff0c;您可以從中下載帶有 所選 Windows 的庫源和文檔以及二進制文件 編譯器&#xff0c;例如 Microsoft Visual C、MinGW-w64 和 TDM-GCC。您還可以閱讀更新的文檔 版本&…

網頁Web端無人機直播RTSP視頻流,無需服務器轉碼,延遲300毫秒

隨著無人機技術的飛速發展&#xff0c;全球無人機直播應用市場也快速擴張&#xff0c;從農業植保巡檢到應急救援指揮&#xff0c;從大型活動直播到智慧城市安防&#xff0c;實時視頻傳輸已成為剛需。預計到2025年&#xff0c;全球將有超過1000萬架商用無人機搭載直播功能&#…

思維鏈框架:LLMChain,OpenAI,PromptTemplate

什么是思維鏈,怎么實現 目錄 什么是思維鏈,怎么實現思維鏈(Chain of Thought)在代碼中的實現方式1. 手動構建思維鏈提示2. 少樣本思維鏈提示3. 自動思維鏈生成4. 思維鏈與工具使用結合5. 使用現有思維鏈框架:LLMChain,OpenAI,PromptTemplate思維鏈實現的關鍵要點思維鏈(C…

杰理強制燒錄撥碼開關

5.3. 工具撥碼開關說明 — JL Project Documentation

智能手表關鍵技術評估報告

?? 智能手表關鍵技術評估報告 產品名稱:Aurora Watch S1 智能手表 編寫日期:2025年5月6日 版本號:v1.0 編寫人:XXX(技術負責人) 一、報告目的 本報告旨在對智能手表核心技術模塊進行全面評估,識別項目研發過程中可能存在的技術風險、供應鏈瓶頸和開發難點,并為架構…

基于RT-Thread驅動EEPROM_AD24C02

基于RT-Thread驅動EEPROM_AD24C02 前言一、硬件設計二、軟件設計三、測試1、eeprom_test&#xff08;&#xff09;測試2、基礎操作字節實驗3、多字節讀寫 前言 存儲容量2048位&#xff0c;內部組織256x8&#xff08;2K&#xff09;&#xff0c;即256個字節的存儲單元&#xff…

五、Hive表類型、分區及數據加載

在 Hive 中高效構建、管理和查詢數據倉庫&#xff0c;核心在于精準運用表類型&#xff08;內部/外部&#xff09;與分區策略&#xff08;靜態/動態/多重&#xff09;。這不僅決定數據的生命周期歸屬&#xff0c;更是優化海量數據查詢性能的關鍵手段。 一、表的身份權責&#x…

C++色彩博弈的史詩:紅黑樹

文章目錄 1.紅黑樹的概念2.紅黑樹的結構3.紅黑樹的插入4.紅黑樹的刪除5.紅黑樹與AVL樹的比較6.紅黑樹的驗證希望讀者們多多三連支持小編會繼續更新你們的鼓勵就是我前進的動力&#xff01; 紅黑樹是一種自平衡二叉查找樹&#xff0c;每個節點都帶有顏色屬性&#xff0c;顏色或為…

基于STM32、HAL庫的CH342F USB轉UART收發器 驅動程序設計

一、簡介: CH342F是一款USB轉串口芯片,由南京沁恒電子(WCH)生產,具有以下特點: 支持USB轉UART、IrDA紅外或SPI接口 內置時鐘,無需外部晶振 支持5V和3.3V電源電壓 最高支持3Mbps波特率 支持常用的MODEM聯絡信號 內置EEPROM,可配置設備VID/PID/序列號等 二、硬件接口: C…

項目功能-圖片清理(上)

一、圖片存儲介紹 在實際開發中&#xff0c;我們會有很多處理不同功能的服務器。例如&#xff1a; 應用服務器&#xff1a;負責部署我們的應用 數據庫服務器&#xff1a;運行我們的數據庫 文件服務器&#xff1a;負責存儲用戶上傳文件的服務器 分服務器處理的目的是讓服務…

創建三個網絡,分別使用RIP、OSPF、靜態,并每個網絡10個電腦。使用DHCP分配IP

DHCP 自動分配IP&#xff0c;集中管理&#xff0c;提高效率 在路由器中設置 Router>en Router#conf t Router(config)#ip dhcp pool ip30 //創建DHCP地址池 Router(dhcp-config)#network 192.168.30.0 255.255.255.0 // 配置網絡地址和子網掩碼 Router(dhcp-config)#defa…

如何使用 WMIC 命令在 Windows 11 或 10 上卸載軟件

如果您正在尋找一個命令提示符或 PowerShell 命令來卸載 Windows 應用程序,那么使用 wmic(Windows Management Instrumentation Command-line)是一種強大的技術,尤其是在處理難以卸載的程序或自動化卸載過程時。在本教程中,我們將學習如何使用 wmic 來卸載軟件。 先決條件…

FEKO許可證的安全與合規性

在電磁仿真領域&#xff0c;FEKO軟件因其出類拔萃的性能和廣泛的應用場景&#xff0c;贏得了全球用戶的廣泛贊譽。但在這背后&#xff0c;是什么讓FEKO在眾多競爭者中脫穎而出&#xff1f;答案是其許可證的安全與合規性。它們不僅為用戶提供了堅固的保障&#xff0c;更確保了用…

ESP32開發入門(九):HTTP服務器開發實踐

一、HTTP服務器基礎 1.1 什么是HTTP服務器&#xff1f; HTTP服務器是能夠處理HTTP請求并返回響應的網絡服務程序。在物聯網應用中&#xff0c;ESP32可以作為輕量級HTTP服務器&#xff0c;直接接收來自客戶端(如瀏覽器、手機APP)的請求。 1.2 ESP32作為HTTP服務器的特點 輕量…

《棒球百科》MLB棒球公益課·棒球1號位

MLB&#xff08;美國職業棒球大聯盟&#xff09;的棒球公益課通過推廣棒球運動、普及體育教育&#xff0c;對全球多個地區產生了多層次的影響&#xff1a; 1. 體育文化推廣 非傳統棒球地區的普及&#xff1a;在棒球基礎較弱的地區&#xff08;如中國、歐洲部分國家&#xff09…