队列
队列
队列是一种特殊的线性表,它只允许在表的一端(队尾)进行插入操作,而在表的另一端(队头)进行删除操作。队列遵循先进先出(First In First Out, FIFO)的原则,即先进入队列的元素将会最先被删除。在队列中,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。
队列可以通过多种方式实现,包括顺序存储结构(如数组)和链式存储结构(如链表)。顺序队列使用一组连续的存储单元按顺序存放队列元素,而链队列则由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
(1) 【数据结构】队列(顺序队列、循环队列、链队列)_顺序队列的定义-CSDN博客. https://blog.csdn.net/Jacky_Feng/article/details/108595654. (2) 【数据结构入门】队列(Queue)详解(定义、销毁、入队、出队等)| 图解数据结构,超详细哦~-CSDN博客. https://blog.csdn.net/weixin_48025315/article/details/120277050. (3) 队列的定义-CSDN博客. https://blog.csdn.net/ZCMUCZX/article/details/80920876.
基本用法
C++
在C++中,队列是一种先进先出(First In First Out, FIFO)的数据结构,它允许在队列的末尾添加元素,并从队列的开头移除元素。C++标准模板库(STL)中的std::queue
是队列的一个实现,它提供了一系列用于操作队列的函数。
以下是std::queue
的一些基本用法:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
// 向队列中添加元素
q.push(1);
q.push(2);
q.push(3);
// 显示队列前端的元素
std::cout << "队列前端的元素是: " << q.front() << std::endl;
// 移除队列前端的元素
q.pop();
// 再次显示队列前端的元素
std::cout << "现在队列前端的元素是: " << q.front() << std::endl;
// 检查队列是否为空
if (!q.empty()) {
std::cout << "队列不为空" << std::endl;
}
// 显示队列中的元素个数
std::cout << "队列中的元素个数是: " << q.size() << std::endl;
return 0;
}
在这个例子中,我们创建了一个int
类型的队列q
,使用push
函数向队列中添加了三个元素,然后使用front
和pop
函数来访问和移除队列前端的元素。我们还使用了empty
函数来检查队列是否为空,以及size
函数来获取队列中的元素个数。
std::queue
可以与不同类型的容器一起使用,但默认情况下,它是基于s
td::deque实现的。你也可以选择使用
std::list`作为底层容器来实现队列。
Python
在Python中,deque
(发音为"deck",全称为double-ended queue,双端队列)是一种由collections
模块提供的数据结构。它是一个线性容器,允许在两端快速添加(append)和删除(pop)元素。与普通的列表相比,deque
在两端操作的时间复杂度为O(1),这使得它在实现队列和栈时非常高效。
以下是deque
的一些基本用法:
from collections import deque
# 创建一个空的deque
d = deque()
# 在右端添加元素
d.append('a')
d.append('b')
# 在左端添加元素
d.appendleft('z')
# 从右端移除元素并返回
r = d.pop()
# 从左端移除元素并返回
l = d.popleft()
# 访问deque中的元素
first_element = d[0]
last_element = d[-1]
# 长度
length = len(d)
# 清空deque
d.clear()
# 限制deque的大小,超出部分会从另一端弹出
limited_deque = deque(maxlen=3)
deque还提供了其他一些有用的方法,如
rotate可以旋转
deque中的元素,
extend和
extendleft可以从一个可迭代对象中添加多个元素。由于其高效的性能,
deque`常用于需要快速添加和移除元素的场景,如在多线程编程中作为共享队列。