当前位置: 首页 > news >正文

C++学习笔记——队列模拟

 

目录

一、模拟队列

二、模拟队列的知识点

三、队列

3.1入队操作

3.2出队操作

3.3访问队首元素

3.4访问队尾元素

3.5判断队列是否为空

3.6获取队列的大小

四、实现队列的基本功能


一、模拟队列

当涉及到数据存储和处理时,队列是一种常见的数据结构,遵循先进先出(FIFO)的原则。以下是关于队列的详细知识点介绍:

  1. 队列是一种线性数据结构,由一系列按顺序排列的元素组成。
  2. 队列具有两个端点,即队首(Front)和队尾(Rear)。
  3. 元素只能从队尾插入队列(入队),从队首移除队列(出队)。
  4. 队列的操作主要有入队、出队、获取队首元素、获取队列大小和判断队列是否为空。
  5. 入队操作将元素插入到队尾,出队操作将队首元素移除并返回。
  6. 获取队首元素操作可以查看队列中的第一个元素,但不会将其移除。
  7. 获取队列大小操作返回当前队列中的元素个数。
  8. 判断队列是否为空操作用于检查队列是否不包含任何元素。
  9. 队列可以用数组或链表等数据结构实现。

对于使用数组实现的队列:

10. 数组必须具有固定大小,以存储队列中的元素。

11. 使用两个指针(front和rear)来跟踪队首和队尾的位置。

12. 入队操作将元素插入到rear指针所指向的位置,然后将rear指针向后移动。

13. 出队操作将front指针向后移动,并返回front指针所指向的元素。

对于使用链表实现的队列:

14. 链表可以动态地增加和删除节点,没有固定大小的限制。

15. 使用一个指针(head)来跟踪队首的位置,使用另一个指针(tail)来跟踪队尾的位置。

16. 入队操作在链表尾部插入新节点,并将tail指针指向新节点。

17. 出队操作将head指针向后移动,并删除原来的队首节点。

队列的应用场景包括但不限于:

  • 任务调度:按照先到先服务的原则,处理多个任务。
  • 缓冲区管理:处理输入和输出之间速度不匹配的情况。
  • 广度优先搜索:在树或图的遍历过程中,按层次遍历节点。

以上是关于队列的详细知识点介绍,它们可以帮助你理解队列的概念、操作和应用。

二、模拟队列的知识点

  1. 队列是一种先进先出(FIFO)的数据结构,类似于现实生活中排队的概念。
  2. C++标准库中的队列类是std::queue,定义在<queue>头文件中。
  3. 使用队列之前,需要包含头文件<queue>和使用命名空间std
  4. 创建队列对象的语法:std::queue<数据类型> 队列名
  5. 入队操作使用push方法,将元素添加到队尾。
  6. 出队操作使用pop方法,移除队列中的第一个元素。
  7. 使用front方法可以访问队首元素。
  8. 使用back方法可以访问队尾元素。
  9. 使用empty方法判断队列是否为空。
  10. 使用size方法获取队列的大小。
  11. 队列内部使用了循环缓冲区(circular buffer)来存储元素,所以入队和出队的时间复杂度都是O(1)。
  12. 队列不支持随机访问,只能从队首开始按顺序访问和处理元素。

三、队列

是一个非常常见的数据结构。它遵循先进先出(FIFO)的原则,类似于现实生活中排队等待的概念。在C++中,使用标准库中的队列类std::queue可以方便地实现队列的操作。

要使用队列,首先需要包含头文件<queue>和使用命名空间std

#include <queue>
using namespace std;

创建队列对象的语法如下:

std::queue<数据类型> 队列名;

例如,创建一个整型队列的示例:

std::queue<int> myQueue;

接下来,可以使用以下方法对队列进行操作:

3.1入队操作

  • 使用push方法将元素添加到队尾:
myQueue.push(10);
myQueue.push(20);
myQueue.push(30);

3.2出队操作

  • 使用pop方法移除队列中的第一个元素:
myQueue.pop();

3.3访问队首元素

  • 使用front方法可以访问队首元素:
int frontElement = myQueue.front();

3.4访问队尾元素

  • 使用back方法可以访问队尾元素:
int backElement = myQueue.back();

3.5判断队列是否为空

  • 使用empty方法可以判断队列是否为空:
if (myQueue.empty()) {// 队列为空
} else {// 队列不为空
}

3.6获取队列的大小

使用size方法可以获取队列中元素的个数:

int sizeOfQueue = myQueue.size();

需要注意的是,队列类使用了循环缓冲区(circular buffer)来存储元素,因此入队和出队的时间复杂度都是O(1),即常数时间。但是,队列不支持随机访问,只能从队首开始按顺序访问和处理元素。

四、实现队列的基本功能

例如任务调度、缓冲区管理、广度优先搜索等。你可以根据具体需求对队列进行进一步的操作和扩展,比如在队列中存储自定义的对象、使用循环结构处理队列中的元素等。5

使用C++标准库中的队列(queue)来模拟队列操作的示例代码:

#include <iostream>
#include <queue>int main() {std::queue<int> myQueue;// 入队操作myQueue.push(10);myQueue.push(20);myQueue.push(30);// 获取队列大小std::cout << "队列的大小:" << myQueue.size() << std::endl;// 判断队列是否为空if (myQueue.empty()) {std::cout << "队列为空" << std::endl;} else {std::cout << "队列不为空" << std::endl;}// 访问队首元素std::cout << "队首元素:" << myQueue.front() << std::endl;// 出队操作myQueue.pop();// 访问队首元素std::cout << "出队后的队首元素:" << myQueue.front() << std::endl;// 获取队列大小std::cout << "队列的大小:" << myQueue.size() << std::endl;return 0;
}

解释:

  1. 首先,我们包含了 <iostream><queue> 头文件,分别用于输入输出和使用队列。

  2. main 函数中,我们创建了一个整型队列 myQueue

  3. 使用 push 方法将三个整数 10、20 和 30 入队。

  4. 使用 size 方法获取队列的大小,并使用 std::cout 打印出来。

  5. 使用 empty 方法判断队列是否为空,并根据结果打印相应的信息。

  6. 使用 front 方法访问队首元素,并使用 std::cout 打印出来。

  7. 使用 pop 方法进行出队操作,移除队列中的第一个元素。

  8. 再次使用 front 方法访问新的队首元素,并使用 std::cout 打印出来。

  9. 再次使用 size 方法获取队列的大小,并使用 std::cout 打印出来。

注意:队列是一种先进先出(FIFO)的数据结构,使用 push 方法将元素添加到队尾,使用 pop 方法将元素从队首移除。front 方法用于访问队首元素,size 方法用于获取队列的大小,empty 方法用于判断队列是否为空。

运行该代码,将输出以下结果:

队列的大小:3
队列不为空
队首元素:10
出队后的队首元素:20
队列的大小:2

这个例子展示了如何使用C++标准库中的队列,进行入队、出队、访问队首元素以及获取队列大小等基本操作。你可以根据需要对队列进行进一步的操作和扩展。

相关文章:

C++学习笔记——队列模拟

目录 一、模拟队列 二、模拟队列的知识点 三、队列 3.1入队操作 3.2出队操作 3.3访问队首元素 3.4访问队尾元素 3.5判断队列是否为空 3.6获取队列的大小 四、实现队列的基本功能 一、模拟队列 当涉及到数据存储和处理时&#xff0c;队列是一种常见的数据结构&#x…...

jvm垃圾回收相关的算法

什么是垃圾 JVM主要通过以下几种方式来判断对象是否需要回收&#xff1a; 引用计数法&#xff1a;JVM通过引用计数器来判断对象的引用数量&#xff0c;当引用数量为0时&#xff0c;表示对象可以被回收。 可达性分析算法&#xff1a;JVM通过根对象&#xff08;如栈中的引用、静…...

每日coding

2085、统计出现过一次的公共字符串 给你两个字符串数组 words1 和 words2 &#xff0c;请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1&#xff1a; 输入&#xff1a;words1 ["leetcode","is","amazing","as"…...

软件工程_复习

软件工程 软件危机(1968 60年代) 产生软件危机的原因: 一方面与软件本身的特点有关,另一方面也和软件开发和维护的方法不正确有关。 与软件本身特点有关: 1.软件不同于硬件,软件是计算机系统中的逻辑部件,缺乏“可见性”,管理和控制软件开发过程相当困难 2.软件在运行过…...

07GoF之三种工厂模式

GoF&#xff08;Gang of Four&#xff09;:四人组,《Design Patterns: Elements of Reusable Object-Oriented Software》&#xff08;《设计模式》)的作者,设计了23种设计模式.但时代发展,还有其它的设计模式&#xff0c;比如&#xff1a;JavaEE的设计模式&#xff08;DAO模式…...

JAVA面试部分——后端-线程前篇

3.1 线程和进程 在计算机科学中&#xff0c;进程和线程是操作系统管理资源的两种不同方式。 进程&#xff08;Process&#xff09;&#xff1a;是程序在计算机上的一次执行活动。每个进程都有自己的内存空间&#xff0c;包括代码、数据和系统资源。一个进程可以包含多个线程。…...

【小沐学C++】C++ 实现鼠标键盘钩子HOOK

文章目录 1、简介2、相关函数2.1 SetWindowsHookEx2.2 UnhookWindowsHookEx2.3 CallNextHookEx 3、相关结构体3.1 KBDLLHOOKSTRUCT3.2 MSLLHOOKSTRUCT 4、挂钩过程5、代码测试5.1 代码1 结语 1、简介 https://learn.microsoft.com/zh-cn/windows/win32/winmsg/about-hooks 挂…...

【pycharm】常见问题与解决

记录一些Pycharm中经常遇到的问题 1. “Open file or Project” always in loading state (hang) a) 老版本 (2021年左右) since build 211.6693.14, it is possible to use a native file chooser on Windows. The feature is experimental; to enable it, add the followi…...

flask web学习之表单(一)

文章目录 一、使用Flask-WTF处理表单1.1 安装Flask-WTF库1.2 定义WTForms表单类常用的WTForm字段实例化字段类常用参数常用的WTForm验证器 1.3 输出HTML代码使用render_kw属性在调用字段时传入 1.4 在模板中渲染表单 在web程序中&#xff0c;表单是用户交互最常见的方式之一。用…...

@ControllerAdvice 使用场景

ControllerAdvice 是Spring 框架中的注解&#xff0c;多用在Spring MVC应用程序中。 使用场景1&#xff1a;处理异常 # 示例1 import org.apache.ibatis.javassist.NotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.Respons…...

二极管选型怎么选?常用参数要熟练~

同学们大家好&#xff0c;今天我们继续学习杨欣的《电子设计从零开始》&#xff0c;这本书从基本原理出发&#xff0c;知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例&#xff0c;可以说是全面系统地介绍了电子设计所需的知识…...

【小白专用】C#关于角色权限系统

&#xff08;C#&#xff09;用户、角色、权限 https://www.cnblogs.com/huangwen/articles/638050.html 权限管理系统——数据库的设计&#xff08;一&#xff09; https://www.cnblogs.com/cmsdn/p/3371576.html 权限管理系统——菜单模块的实现&#xff08;二&#xff09; …...

代码随想录算法训练营

一刷打卡记录&#xff1a; 日期打卡2023/10/25 day01二分查找有点转不过弯&#xff0c;快慢指针能理解&#xff0c;自己写也可能写不出来&#xff0c;但是能记住了&#xff0c;能看懂&#xff0c;还有其他解法待补充看完&#xff0c;花了挺长时间的2023/10/26 day02还好&#…...

统计学-R语言-3

文章目录 前言给直方图增加正态曲线的不恰当之处直方图与条形图的区别核密度图时间序列图洛伦茨曲线计算绘制洛伦茨曲线所需的各百分比数值绘制洛伦茨曲线 练习 前言 本篇文章是介绍对数据的部分图形可视化的图型展现。 给直方图增加正态曲线的不恰当之处 需要注意的是&#…...

spring动态控制定时任务

在spring框架中&#xff0c;对于简单的定时任务&#xff0c;可以使用 Scheduled 注解实现&#xff0c;在实际项目中&#xff0c;经常需要动态的控制定时任务&#xff0c;比如通过接口增加、启动、停止、删除定时任务&#xff0c;动态的改变定时任务的执行时间等。 我们可以通过…...

3. Mybatis 中SQL 执行原理

2. Mybatis 中SQL 执行原理 这里有两种方式&#xff0c;一种为常用的 Spring 依赖注入 Mapper 的方式。另一种为直接使用 SqlSessionTemplate 执行 Sql 的方式。 Spring 依赖注入 Mapper 的方式 Mapper 接口注入 SpringIOC 容器 Spring 容器在扫描 BeanDefinition 阶段会扫…...

第一次在RUST官方论坛上留言发布我的Rust板箱

第一次在RUST官方论坛上发帖子&#xff0c;有点紧张~地址在这里&#xff1a; 【My Rust Crate】obtains linux local information - The Rust Programming Language Forum (rust-lang.org)...

LabVIEW 智能化矿用定向钻机液压系统监测

简介 在矿用定向钻机的液压系统监测中&#xff0c;实现实时监控和异常预警对于保障设备运行的稳定性至关重要。传统的人工监测方法效率低下而且准确性不能满足要求&#xff0c;针对这种情况采用 LabVIEW 开发平台&#xff0c;设计并实现了一套智能化矿用定向钻机液压系统的状态…...

GO数据库操作

Golang 出色的 ORM 库为 GORM。 官网文档&#xff1a;https://gorm.io/docs/ 我们来说说增删改查的用法&#xff0c;更深入的研究可以去官网看看。 GORM功能概览&#xff1a; 关联&#xff08;有一个、有多个、属于、多对多、多态性、单表继承&#xff09;挂钩&#xff08;创…...

PyTorch简单理解ChannelShuffle与数据并行技术解析

目录 torch.nn子模块详解 nn.ChannelShuffle 用法与用途 使用技巧 注意事项 参数 示例代码 nn.DataParallel 用法与用途 使用技巧 注意事项 参数 示例 nn.parallel.DistributedDataParallel 用法与用途 使用技巧 注意事项 参数 示例 总结 torch.nn子模块详…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...