c++队列

1. 队列的定义与概念

队列(Queue)是一种遵循先进先出(First - In - First - Out,FIFO)原则的线性数据结构。就像日常生活中人们排队等待服务,先到达队列的元素会先被处理,后到达的元素需要在队列尾部等待。在队列中,元素的插入操作在队尾进行,而删除操作在队头进行。

2. 队列的常见操作

  • 入队(Enqueue):将一个新元素添加到队列的尾部。
  • 出队(Dequeue):移除并返回队列头部的元素。
  • 查看队头元素(Front):返回队列头部的元素,但不将其从队列中移除。
  • 判断队列是否为空(IsEmpty):检查队列中是否有元素。
  • 获取队列元素数量(Size):返回队列中当前元素的个数。

3. 队列的C++实现方式

3.1 使用数组实现队列

以下是一个简单的使用数组实现的队列类:

#include <iostream>
const int MAX_SIZE = 100;

class ArrayQueue {
private:
    int queue[MAX_SIZE];
    int front;
    int rear;
    int size;

public:
    ArrayQueue() : front(0), rear(0), size(0) {}

    // 入队操作
    void enqueue(int item) {
        if (size == MAX_SIZE) {
            std::cout << "队列已满,无法入队!" << std::endl;
            return;
        }
        queue[rear] = item;
        rear = (rear + 1) % MAX_SIZE;
        size++;
    }

    // 出队操作
    int dequeue() {
        if (isEmpty()) {
            std::cout << "队列为空,无法出队!" << std::endl;
            return -1;
        }
        int item = queue[front];
        front = (front + 1) % MAX_SIZE;
        size--;
        return item;
    }

    // 查看队头元素
    int frontElement() {
        if (isEmpty()) {
            std::cout << "队列为空!" << std::endl;
            return -1;
        }
        return queue[front];
    }

    // 判断队列是否为空
    bool isEmpty() {
        return size == 0;
    }

    // 获取队列元素数量
    int getSize() {
        return size;
    }
};


你可以使用以下方式调用这个队列类:

int main() {
    ArrayQueue q;
    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);
    std::cout << "队头元素: " << q.frontElement() << std::endl;
    std::cout << "出队元素: " << q.dequeue() << std::endl;
    std::cout << "当前队列大小: " << q.getSize() << std::endl;
    return 0;
}

这里使用取模运算 % 来实现循环队列,避免了数组空间的浪费。

3.2 使用标准库 std::queue

C++ 标准库 <queue> 中提供了 std::queue 容器适配器,它基于其他容器(如 std::dequestd::list)实现,使用起来更加方便:

#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;

    // 获取队列元素数量
    std::cout << "当前队列大小: " << q.size() << std::endl;

    // 判断队列是否为空
    std::cout << "队列是否为空: " << (q.empty() ? "是" : "否") << std::endl;

    return 0;
}

std::queue 提供了 push() 用于入队,pop() 用于出队,front() 查看队头元素,size() 获取队列大小,empty() 判断队列是否为空等操作。

4. 队列的应用场景

  • 任务调度:在操作系统中,任务队列用于管理待执行的任务,按照任务到达的顺序依次执行。
  • 消息传递:在网络编程中,消息队列用于存储和传递消息,确保消息按照发送的顺序被接收和处理。
  • 广度优先搜索(BFS):在图算法中,广度优先搜索使用队列来遍历图的节点,保证节点按照距离起始节点的层数依次被访问。
考研机试常用的数据结构 文章被收录于专栏

考研机试常用的数据结构

全部评论

相关推荐

04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
只有一个苍穹外卖外加正在看黑马点评,可以找小厂实习吗,还有我的简历有什么大问题吗
Java抽象小篮子:感觉有点熟悉,问题1是学历,2是没实习经历,3是专业技能写得太少太少了(怎么写可以看我置顶帖),4是仅这一个项目找实习不够看。拷打完毕,简历怎么写可以看我置顶帖子
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务