📜  C++中队列和双端队列的区别(1)

📅  最后修改于: 2023-12-03 14:39:59.289000             🧑  作者: Mango

C++中队列和双端队列的区别

1. 队列(Queue)

队列是一种先进先出(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
2. 双端队列(Deque)

双端队列是一种可以从队头或队尾插入或删除元素的数据结构。双端队列(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

可以看到,在双端队列中,我们既可以从队头插入或删除元素,也可以从队尾插入或删除元素。而在队列中,我们只能从队尾插入元素,只能从队头删除元素。

3. 总结

队列和双端队列都是常见的数据结构,在不同的场景下选择合适的数据结构可以提高程序的效率。如果只需要按照先进先出的方式处理数据,那么使用队列就可以了。但如果需要在队头或队尾插入或删除元素,那么就需要使用双端队列了。