c++怎么实现一个队列queue_c++队列容器使用与实现方法

22次阅读

c++中队列遵循FIFO原则,标准库std::queue基于deque实现,提供push、pop、front等接口;也可用循环数组或链表自定义实现,前者适合固定大小高性能场景,后者支持动态扩容,推荐学习时理解原理,实际开发优先使用std::queue。

c++怎么实现一个队列queue_c++队列容器使用与实现方法

在C++中,队列(queue)是一种先进先出(FIFO)的数据结构标准库提供了std::queue容器适配器,也可以手动实现一个队列。下面分别介绍C++中队列的使用方法和自定义实现方式。

std::queue 的使用方法

std::queue 是定义在 <queue> 头文件中的容器适配器,默认基于 std::deque 实现,也可指定其他底层容器如 std::list

常用操作接口:

  • push(element):在队尾插入元素
  • pop():删除队头元素(不返回值)
  • front():获取队头元素的引用
  • back():获取队尾元素的引用
  • empty():判断队列是否为空
  • size():返回队列中元素个数

示例代码:

立即学习C++免费学习笔记(深入)”;

#include <iostream> #include <queue> <p>int main() { std::queue<int> q;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">q.push(10); q.push(20); q.push(30);  while (!q.empty()) {     std::cout << "Front: " << q.front() << "n";     q.pop(); }  return 0;

}

自定义队列的实现(数组方式)

可以用循环数组实现一个简单的固定大小队列,适合理解队列原理。

基本思路:

  • 使用数组存储数据
  • 维护 front 和 rear 指针
  • 通过取模实现循环利用空间

代码实现:

c++怎么实现一个队列queue_c++队列容器使用与实现方法

ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

c++怎么实现一个队列queue_c++队列容器使用与实现方法116

查看详情 c++怎么实现一个队列queue_c++队列容器使用与实现方法

#include <iostream> #define MAX_SIZE 100 <p>class Queue { private: int data[MAX_SIZE]; int front, rear; int count;</p><p>public: Queue() : front(0), rear(0), count(0) {}</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">bool empty() const {     return count == 0; }  bool full() const {     return count == MAX_SIZE; }  void push(int value) {     if (full()) {         std::cerr << "Queue is full!n";         return;     }     data[rear] = value;     rear = (rear + 1) % MAX_SIZE;     count++; }  void pop() {     if (empty()) {         std::cerr << "Queue is empty!n";         return;     }     front = (front + 1) % MAX_SIZE;     count--; }  int& frontElement() {     if (empty()) {         throw std::runtime_error("Queue is empty!");     }     return data[front]; }  int size() const {     return count; }

};

链表实现动态队列

使用链表可以实现无限扩容的队列(受限于内存),更灵活。

实现要点:

  • 定义节点结构体
  • 维护头尾指针
  • 入队在尾部,出队在头部

代码示例:

#include <iostream> #include <stdexcept> <p>struct node { int data; Node* next; Node(int val) : data(val), next(nullptr) {} };</p><p>class LinkedQueue { private: Node<em> front; Node</em> rear;</p><p>public: LinkedQueue() : front(nullptr), rear(nullptr) {}</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">~LinkedQueue() {     while (front) {         Node* temp = front;         front = front->next;         delete temp;     } }  void push(int value) {     Node* newNode = new Node(value);     if (!rear) {         front = rear = newNode;     } else {         rear->next = newNode;         rear = newNode;     } }  void pop() {     if (!front) {         std::cerr << "Queue is empty!n";         return;     }     Node* temp = front;     front = front->next;     if (!front) rear = nullptr;     delete temp; }  int& frontElement() {     if (!front) {         throw std::runtime_error("Queue is empty!");     }     return front->data; }  bool empty() const {     return front == nullptr; }

};

选择与建议

实际开发中优先使用 std::queue,它经过优化且不易出错。学习或特殊场景下可尝试手动实现。数组实现适合固定大小、高性能要求的场合;链表实现更灵活,支持动态增长。

基本上就这些,掌握标准用法和基本原理就够用了。

text=ZqhQzanResources