0

0

C++怎么实现一个队列_C++ STL中std::queue或链表实现队列操作

下次还敢

下次还敢

发布时间:2025-11-20 17:15:06

|

480人浏览过

|

来源于php中文网

原创

C++中实现队列有两种方式:使用STL的std::queue或手动链表实现。std::queue基于deque,提供push、pop、front等接口,使用方便且安全,推荐日常使用;手动链表实现需定义节点和头尾指针,操作复杂但有助于理解底层机制,适合学习场景。两者均支持O(1)入队出队,但std::queue不支持遍历,若需遍历可考虑std::list。

c++怎么实现一个队列_c++ stl中std::queue或链表实现队列操作

在C++中实现队列,主要有两种常见方式:使用标准模板库(STL)中的 std::queue,或者通过链表手动实现一个队列。下面分别介绍这两种方法的用法和特点。

使用 std::queue(推荐日常使用)

std::queue 是 C++ STL 提供的容器适配器,底层默认基于 deque 实现,也可以指定 list 或其他序列容器。它提供了先进先出(FIFO)的操作接口,使用非常方便。

基本操作:

  • push(element):将元素加入队尾
  • pop():移除队首元素(不返回值)
  • front():获取队首元素
  • back():获取队尾元素
  • empty():判断队列是否为空
  • size():返回队列中元素个数

示例代码:

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

#include 
#include 

int main() { std::queue q;

q.push(10);
q.push(20);
q.push(30);

while (!q.empty()) {
    std::cout << "Front: " << q.front() << "\n";
    q.pop();
}

return 0;

}

输出结果:

Front: 10
Front: 20
Front: 30

优点是无需手动管理内存,接口简洁安全。

使用链表手动实现队列(理解原理)

如果想深入理解队列的工作机制,可以自己用链表实现。这种方式需要定义节点结构,并维护头指针和尾指针,保证入队和出队操作的时间复杂度为 O(1)。

实现步骤:

喵记多
喵记多

喵记多 - 自带助理的 AI 笔记

下载
  • 定义链表节点结构 Node
  • 维护 front 和 rear 指针
  • 实现 push(入队)、pop(出队)、isEmpty 等操作

示例代码:

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

#include 

struct Node { int data; Node* next; Node(int val) : data(val), next(nullptr) {} };

class Queue { private: Node front; Node rear;

public: Queue() : front(nullptr), rear(nullptr) {}

void push(int val) {
    Node* newNode = new Node(val);
    if (rear == nullptr) {
        front = rear = newNode;
    } else {
        rear->next = newNode;
        rear = newNode;
    }
}

void pop() {
    if (front == nullptr) {
        std::cout << "Queue is empty\n";
        return;
    }
    Node* temp = front;
    front = front->next;
    if (front == nullptr) {
        rear = nullptr;
    }
    delete temp;
}

int peek() {
    if (front == nullptr) {
        std::cout << "Queue is empty\n";
        return -1;
    }
    return front->data;
}

bool empty() {
    return front == nullptr;
}

~Queue() {
    while (!empty()) {
        pop();
    }
}

};

int main() { Queue q; q.push(1); q.push(2); q.push(3);

while (!q.empty()) {
    std::cout << "Front: " << q.peek() << "\n";
    q.pop();
}

return 0;

}

这个实现展示了队列的核心逻辑:front 负责出队,rear 负责入队,每次操作保持指针更新。

std::queue 与链表实现对比

选择哪种方式取决于使用场景:

  • std::queue:适合大多数应用场景,写法简单,不易出错,性能良好
  • 链表实现:有助于理解数据结构底层机制,适合学习或特殊定制需求

注意:std::queue 默认不能遍历,因为它只提供 FIFO 接口。如需遍历,可考虑使用 std::list 配合手写逻辑。

基本上就这些。日常开发优先用 std::queue,学习原理时动手写链表实现会更有收获。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

537

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

52

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

534

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

14

2026.01.06

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1018

2023.10.19

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.7万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 18.8万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号