当前位置:首页 > C++ > 正文

C++队列数据结构实现(从零开始掌握队列原理与代码编写)

在编程中,队列(Queue)是一种非常基础且常用的数据结构。它遵循“先进先出”(FIFO, First In First Out)的原则,就像我们在超市排队结账一样:先来的人先被服务。本教程将带你从零开始,使用C++语言实现一个完整的队列数据结构,无论你是编程小白还是有一定基础的学习者,都能轻松理解。

C++队列数据结构实现(从零开始掌握队列原理与代码编写) C++队列实现 队列数据结构 C++ STL队列 自定义队列C++ 第1张

什么是队列?

队列有两个关键操作:

  • 入队(enqueue):在队列尾部添加元素。
  • 出队(dequeue):从队列头部移除元素。

除此之外,我们通常还会实现以下辅助功能:

  • front():查看队首元素但不移除。
  • isEmpty():判断队列是否为空。
  • size():获取当前队列中元素的数量。

方法一:使用 C++ STL 队列(推荐初学者)

C++ 标准模板库(STL)已经为我们提供了现成的队列容器 std::queue,使用起来非常方便。这是学习 C++ STL队列 的最佳起点。

#include <iostream>#include <queue>int main() {    std::queue<int> q;    // 入队    q.push(10);    q.push(20);    q.push(30);    // 查看队首元素    std::cout << "队首元素: " << q.front() << std::endl; // 输出 10    // 出队    q.pop();    // 当前大小    std::cout << "队列大小: " << q.size() << std::endl; // 输出 2    // 判断是否为空    if (!q.empty()) {        std::cout << "队列非空" << std::endl;    }    return 0;}

这种方式简单高效,适合大多数应用场景。但如果你想深入理解队列底层原理,建议尝试自己实现一个队列。

方法二:手动实现队列(基于数组)

下面我们用数组手动实现一个固定容量的队列。这有助于你掌握 自定义队列C++ 的核心逻辑。

#include <iostream>#include <stdexcept> // 用于异常处理class MyQueue {private:    int* arr;          // 存储队列元素的数组    int capacity;      // 队列最大容量    int frontIndex;    // 队首索引    int rearIndex;     // 队尾索引    int currentSize;   // 当前元素数量public:    // 构造函数    MyQueue(int size) {        capacity = size;        arr = new int[capacity];        frontIndex = 0;        rearIndex = -1;        currentSize = 0;    }    // 析构函数,释放内存    ~MyQueue() {        delete[] arr;    }    // 入队    void enqueue(int value) {        if (currentSize == capacity) {            throw std::overflow_error("队列已满,无法入队!");        }        rearIndex = (rearIndex + 1) % capacity; // 循环队列        arr[rearIndex] = value;        currentSize++;    }    // 出队    int dequeue() {        if (isEmpty()) {            throw std::underflow_error("队列为空,无法出队!");        }        int value = arr[frontIndex];        frontIndex = (frontIndex + 1) % capacity;        currentSize--;        return value;    }    // 查看队首元素    int front() {        if (isEmpty()) {            throw std::underflow_error("队列为空!");        }        return arr[frontIndex];    }    // 判断是否为空    bool isEmpty() {        return currentSize == 0;    }    // 获取当前大小    int size() {        return currentSize;    }};// 测试代码int main() {    MyQueue q(5);    q.enqueue(100);    q.enqueue(200);    q.enqueue(300);    std::cout << "队首: " << q.front() << std::endl; // 100    std::cout << "出队: " << q.dequeue() << std::endl; // 100    std::cout << "当前大小: " << q.size() << std::endl; // 2    return 0;}

这段代码实现了循环队列(Circular Queue),避免了普通数组队列在多次入队出队后“假溢出”的问题。这也是 C++队列实现 中的经典优化技巧。

总结

通过本教程,你已经掌握了两种实现队列的方法:

  1. 使用 C++ STL 提供的 std::queue —— 快速、安全、高效。
  2. 手动实现基于数组的循环队列 —— 深入理解 队列数据结构 的内部机制。

对于初学者,建议先熟练使用 STL 队列;当你需要定制功能或优化性能时,再考虑自定义实现。无论哪种方式,理解 FIFO 原则和基本操作都是关键。

希望这篇教程能帮助你扎实掌握 C++ 中的队列!如果你觉得有用,欢迎分享给更多正在学习 C++队列实现 的朋友。