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.mzph.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…