deque(双端队列)是一种具有高效两端插入和删除操作的数据结构,常见于C++标准库(STL)和其他编程语言中。它的底层实现结合了数组和链表的优势,既支持高效的随机访问,又能在两端快速插入/删除元素。
底层数据结构原理
deque 的核心思想是分段连续存储:
- 使用多个固定大小的块(通常是数组)存储元素。
- 这些块通过一个中控器(通常是指针数组)连接,形成逻辑上的连续序列。

关键组成部分
-
中控器(Map)
- 一个动态分配的数组,每个元素是指向数据块的指针。
- 当需要扩展容量时,中控器会重新分配并调整指针。
-
数据块(Buffer)
- 固定大小的连续内存块(数组),存储实际元素。
- 每个块的大小通常是编译时确定的(如C++ STL中默认大小为512字节)。
-
迭代器(Iterator)
- 智能指针,封装了当前元素在哪个块、块内的偏移量等信息。
- 通过重载运算符(如
++,--,[])实现透明的随机访问。
操作效率
| 操作 | 时间复杂度 | 说明 |
|---|---|---|
| 两端插入/删除 | O(1) | 仅需调整中控器和块内指针 |
| 随机访问 | O(1) | 通过中控器和块内偏移量直接计算 |
| 中间插入/删除 | O(n) | 需要移动元素 |
| 内存扩展 | O(n) | 重新分配中控器并复制指针 |
与其他容器的对比
| 容器 | 随机访问 | 两端插入/删除 | 中间插入/删除 | 内存布局 |
|---|---|---|---|---|
vector |
O(1) | 尾部O(1)*</ |
deque与queue底层结构及异同解析

最低0.47元/天 解锁文章
670

被折叠的 条评论
为什么被折叠?



