📅  最后修改于: 2023-12-03 14:39:59.289000             🧑  作者: Mango
队列是一种先进先出(FIFO)的数据结构,相当于一条管道,新进入的数据必须排在队尾,先进入的数据必须从队头出去。队列只有两个操作:入队和出队。入队相当于向队尾插入数据,出队相当于从队头取出数据。
在 C++ STL 中,可以使用 queue
类来实现队列。以下是使用 queue
类实现队列的样例代码:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q; // 定义一个整数型队列
// 入队操作
q.push(1);
q.push(2);
q.push(3);
// 出队操作
while (!q.empty())
{
cout << q.front() << " "; // 取出队头元素,并输出
q.pop(); // 将队头元素出队
}
return 0;
}
输出结果如下:
1 2 3
双端队列是一种可以从队头或队尾插入或删除元素的数据结构。双端队列(Double Ended Queue)的缩写是 Deque。双端队列比队列更加灵活,可以在队头或队尾插入或删除元素,所以它也被称为双端链表。
在 C++ STL 中,可以使用 deque
类来实现双端队列。以下是使用 deque
类实现双端队列的样例代码:
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> dq; // 定义一个整数型双端队列
// 从队头插入元素
dq.push_front(1);
dq.push_front(2);
dq.push_front(3);
// 从队尾插入元素
dq.push_back(4);
dq.push_back(5);
dq.push_back(6);
// 从队头删除元素
cout << dq.front() << " "; // 输出队头元素
dq.pop_front(); // 将队头元素删除
// 从队尾删除元素
cout << dq.back() << " "; // 输出队尾元素
dq.pop_back(); // 将队尾元素删除
// 遍历双端队列
for (int i = 0; i < dq.size(); i++)
{
cout << dq[i] << " ";
}
return 0;
}
输出结果如下:
3 6 2 1 4
可以看到,在双端队列中,我们既可以从队头插入或删除元素,也可以从队尾插入或删除元素。而在队列中,我们只能从队尾插入元素,只能从队头删除元素。
队列和双端队列都是常见的数据结构,在不同的场景下选择合适的数据结构可以提高程序的效率。如果只需要按照先进先出的方式处理数据,那么使用队列就可以了。但如果需要在队头或队尾插入或删除元素,那么就需要使用双端队列了。