C++学习笔记——队列模拟
目录
一、模拟队列
二、模拟队列的知识点
三、队列
3.1入队操作
3.2出队操作
3.3访问队首元素
3.4访问队尾元素
3.5判断队列是否为空
3.6获取队列的大小
四、实现队列的基本功能
一、模拟队列
当涉及到数据存储和处理时,队列是一种常见的数据结构,遵循先进先出(FIFO)的原则。以下是关于队列的详细知识点介绍:
- 队列是一种线性数据结构,由一系列按顺序排列的元素组成。
- 队列具有两个端点,即队首(Front)和队尾(Rear)。
- 元素只能从队尾插入队列(入队),从队首移除队列(出队)。
- 队列的操作主要有入队、出队、获取队首元素、获取队列大小和判断队列是否为空。
- 入队操作将元素插入到队尾,出队操作将队首元素移除并返回。
- 获取队首元素操作可以查看队列中的第一个元素,但不会将其移除。
- 获取队列大小操作返回当前队列中的元素个数。
- 判断队列是否为空操作用于检查队列是否不包含任何元素。
- 队列可以用数组或链表等数据结构实现。
对于使用数组实现的队列:
10. 数组必须具有固定大小,以存储队列中的元素。
11. 使用两个指针(front和rear)来跟踪队首和队尾的位置。
12. 入队操作将元素插入到rear指针所指向的位置,然后将rear指针向后移动。
13. 出队操作将front指针向后移动,并返回front指针所指向的元素。
对于使用链表实现的队列:
14. 链表可以动态地增加和删除节点,没有固定大小的限制。
15. 使用一个指针(head)来跟踪队首的位置,使用另一个指针(tail)来跟踪队尾的位置。
16. 入队操作在链表尾部插入新节点,并将tail指针指向新节点。
17. 出队操作将head指针向后移动,并删除原来的队首节点。
队列的应用场景包括但不限于:
- 任务调度:按照先到先服务的原则,处理多个任务。
- 缓冲区管理:处理输入和输出之间速度不匹配的情况。
- 广度优先搜索:在树或图的遍历过程中,按层次遍历节点。
以上是关于队列的详细知识点介绍,它们可以帮助你理解队列的概念、操作和应用。
二、模拟队列的知识点
- 队列是一种先进先出(FIFO)的数据结构,类似于现实生活中排队的概念。
- C++标准库中的队列类是
std::queue
,定义在<queue>
头文件中。 - 使用队列之前,需要包含头文件
<queue>
和使用命名空间std
。 - 创建队列对象的语法:
std::queue<数据类型> 队列名
。 - 入队操作使用
push
方法,将元素添加到队尾。 - 出队操作使用
pop
方法,移除队列中的第一个元素。 - 使用
front
方法可以访问队首元素。 - 使用
back
方法可以访问队尾元素。 - 使用
empty
方法判断队列是否为空。 - 使用
size
方法获取队列的大小。 - 队列内部使用了循环缓冲区(circular buffer)来存储元素,所以入队和出队的时间复杂度都是O(1)。
- 队列不支持随机访问,只能从队首开始按顺序访问和处理元素。
三、队列
是一个非常常见的数据结构。它遵循先进先出(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;
}
解释:
-
首先,我们包含了
<iostream>
和<queue>
头文件,分别用于输入输出和使用队列。 -
在
main
函数中,我们创建了一个整型队列myQueue
。 -
使用
push
方法将三个整数 10、20 和 30 入队。 -
使用
size
方法获取队列的大小,并使用std::cout
打印出来。 -
使用
empty
方法判断队列是否为空,并根据结果打印相应的信息。 -
使用
front
方法访问队首元素,并使用std::cout
打印出来。 -
使用
pop
方法进行出队操作,移除队列中的第一个元素。 -
再次使用
front
方法访问新的队首元素,并使用std::cout
打印出来。 -
再次使用
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获取队列的大小 四、实现队列的基本功能 一、模拟队列 当涉及到数据存储和处理时,队列是一种常见的数据结构&#x…...
jvm垃圾回收相关的算法
什么是垃圾 JVM主要通过以下几种方式来判断对象是否需要回收: 引用计数法:JVM通过引用计数器来判断对象的引用数量,当引用数量为0时,表示对象可以被回收。 可达性分析算法:JVM通过根对象(如栈中的引用、静…...
每日coding
2085、统计出现过一次的公共字符串 给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1: 输入:words1 ["leetcode","is","amazing","as"…...
软件工程_复习
软件工程 软件危机(1968 60年代) 产生软件危机的原因: 一方面与软件本身的特点有关,另一方面也和软件开发和维护的方法不正确有关。 与软件本身特点有关: 1.软件不同于硬件,软件是计算机系统中的逻辑部件,缺乏“可见性”,管理和控制软件开发过程相当困难 2.软件在运行过…...
07GoF之三种工厂模式
GoF(Gang of Four):四人组,《Design Patterns: Elements of Reusable Object-Oriented Software》(《设计模式》)的作者,设计了23种设计模式.但时代发展,还有其它的设计模式,比如:JavaEE的设计模式(DAO模式…...
JAVA面试部分——后端-线程前篇
3.1 线程和进程 在计算机科学中,进程和线程是操作系统管理资源的两种不同方式。 进程(Process):是程序在计算机上的一次执行活动。每个进程都有自己的内存空间,包括代码、数据和系统资源。一个进程可以包含多个线程。…...
【小沐学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程序中,表单是用户交互最常见的方式之一。用…...
@ControllerAdvice 使用场景
ControllerAdvice 是Spring 框架中的注解,多用在Spring MVC应用程序中。 使用场景1:处理异常 # 示例1 import org.apache.ibatis.javassist.NotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.Respons…...
二极管选型怎么选?常用参数要熟练~
同学们大家好,今天我们继续学习杨欣的《电子设计从零开始》,这本书从基本原理出发,知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例,可以说是全面系统地介绍了电子设计所需的知识…...
【小白专用】C#关于角色权限系统
(C#)用户、角色、权限 https://www.cnblogs.com/huangwen/articles/638050.html 权限管理系统——数据库的设计(一) https://www.cnblogs.com/cmsdn/p/3371576.html 权限管理系统——菜单模块的实现(二) …...
代码随想录算法训练营
一刷打卡记录: 日期打卡2023/10/25 day01二分查找有点转不过弯,快慢指针能理解,自己写也可能写不出来,但是能记住了,能看懂,还有其他解法待补充看完,花了挺长时间的2023/10/26 day02还好&#…...
统计学-R语言-3
文章目录 前言给直方图增加正态曲线的不恰当之处直方图与条形图的区别核密度图时间序列图洛伦茨曲线计算绘制洛伦茨曲线所需的各百分比数值绘制洛伦茨曲线 练习 前言 本篇文章是介绍对数据的部分图形可视化的图型展现。 给直方图增加正态曲线的不恰当之处 需要注意的是&#…...
spring动态控制定时任务
在spring框架中,对于简单的定时任务,可以使用 Scheduled 注解实现,在实际项目中,经常需要动态的控制定时任务,比如通过接口增加、启动、停止、删除定时任务,动态的改变定时任务的执行时间等。 我们可以通过…...
3. Mybatis 中SQL 执行原理
2. Mybatis 中SQL 执行原理 这里有两种方式,一种为常用的 Spring 依赖注入 Mapper 的方式。另一种为直接使用 SqlSessionTemplate 执行 Sql 的方式。 Spring 依赖注入 Mapper 的方式 Mapper 接口注入 SpringIOC 容器 Spring 容器在扫描 BeanDefinition 阶段会扫…...
第一次在RUST官方论坛上留言发布我的Rust板箱
第一次在RUST官方论坛上发帖子,有点紧张~地址在这里: 【My Rust Crate】obtains linux local information - The Rust Programming Language Forum (rust-lang.org)...
LabVIEW 智能化矿用定向钻机液压系统监测
简介 在矿用定向钻机的液压系统监测中,实现实时监控和异常预警对于保障设备运行的稳定性至关重要。传统的人工监测方法效率低下而且准确性不能满足要求,针对这种情况采用 LabVIEW 开发平台,设计并实现了一套智能化矿用定向钻机液压系统的状态…...
GO数据库操作
Golang 出色的 ORM 库为 GORM。 官网文档:https://gorm.io/docs/ 我们来说说增删改查的用法,更深入的研究可以去官网看看。 GORM功能概览: 关联(有一个、有多个、属于、多对多、多态性、单表继承)挂钩(创…...
PyTorch简单理解ChannelShuffle与数据并行技术解析
目录 torch.nn子模块详解 nn.ChannelShuffle 用法与用途 使用技巧 注意事项 参数 示例代码 nn.DataParallel 用法与用途 使用技巧 注意事项 参数 示例 nn.parallel.DistributedDataParallel 用法与用途 使用技巧 注意事项 参数 示例 总结 torch.nn子模块详…...
MySQL 8查询语句之查询所有字段、特定字段、去除重复字段、Where判断条件
《MySQL 8创建数据库、数据表、插入数据并且查询数据》里边有我使用到的数据。 再使用下方的语句补充一些数据: insert into Bookbought.bookuser(id,username,userphone,userage,sex,userpassword) values (11,Book Break,22245678911,18,male,good#111); insert…...
LLaMA-Factory添加adalora
感谢https://github.com/tsingcoo/LLaMA-Efficient-Tuning/commit/f3a532f56b4aa7d4200f24d93fade4b2c9042736和https://github.com/huggingface/peft/issues/432的帮助。 在LLaMA-Factory中添加adalora 1. 修改src/llmtuner/hparams/finetuning_args.py代码 在FinetuningArg…...
多端多用户万能DIY商城系统源码:自营+多商户入驻商城系统 独立部署 带完整的安装代码包以及搭建教程
电子商务行业日新月异,许多企业希望能够通过线上商城拓展业务。但是,传统商城系统往往无法满足多样化、个性化的需求,而且开发周期长、成本高。罗峰就来给大家分享一款多端多用户万能DIY商城系统源码,搭建简单。 以下是部分代码示…...
Qt 6之七:学习资源
Qt 6之七:学习资源 Qt是一种跨平台的C应用程序开发框架,它提供了一套丰富的工具和库,可以帮助开发者快速构建跨平台的应用程序,用于开发图形用户界面(GUI)和非GUI应用程序。 Qt 6之一:简介、安…...
解决大模型的幻觉问题:一种全新的视角
在人工智能领域,大模型已经成为了一个重要的研究方向。然而,随着模型规模的不断扩大,一种新的问题开始浮出水面,那就是“幻觉”问题。这种问题的出现,不仅影响了模型的性能,也对人工智能的发展带来了新的挑…...
mysql进阶-重构表
目录 1. 原因 2. 如何重构表呢? 2.1 命令1: 2.2 命令2: 2.3 命令3: 1. 原因 正常的业务开发,为什么需要重构表呢? 原因1:某张表存在大量的新增和删除操作,导致表经历过大量的…...
Element-ui图片懒加载
核心代码 <el-image src"https://img-blog.csdnimg.cn/direct/2236deb5c315474884599d90a85d761d.png" alt"我是图片" lazy><img slot"error" src"https://img-blog.csdnimg.cn/direct/81bf096a0dff4e5fa58e5f43fd44dcc6.png&quo…...
Linux系统——DNS解析详解
目录 一、DNS域名解析 1.DNS的作用 2.域名的组成 2.1域名层级结构关系特点 2.2域名空间构成 2.3域名的四种不同类型 2.3.1延伸 2.3.2总结 3.DNS域名解析过程 3.1递归查询 3.2迭代查询 3.3一次DNS解析的过程 4.DNS系统类型 4.1缓存域名服务器 4.2主域名服务器 4…...
初识Ubuntu
其实还是linux操作系统 命令都一样 但是在学习初级阶段,我还是将其分开有便于我的学习和稳固。 cat 查看文件 命令 Ubuntu工作中经常是用普通用户,在需要时才进行登录管理员用户 sudn -i 切换成管理用户 我们远程连接时 如果出现 hostname -I没有出现…...
Casper Network (CSPR)2024 年愿景:通过投资促进增长
Casper Network (CSPR)是行业领先的 Layer-1 区块链网络之一,通过推出了一系列值得关注的技术改进和倡议,已经为 2024 年做好了准备。 在过去的一年里,Casper Network (CSPR)不断取得里程碑式的进展,例如推…...
有情怀的网站设计/搜索seo优化托管
SELECT *FROM table LIMIT [offset,]rows |rows OFFSET offsetLIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指…...
科技网站有哪些/网站关键词排名外包
微信小游戏开发过程中,在Cocos Creator刚构建完,点运行到微信开发者工具上,就出现上面这个报错提示。一、 原因分析app.json找不着,这是走的微信小程序入口,而不是微信小游戏入口,微信小游戏入口应该是game…...
制作链接的步骤/洛阳搜索引擎优化
设置MyEclipse黑色主题背景 1. 下载 http://eclipsecolorthemes.org/ 看哪个合适直接点击进入, 下载右边的epf 2. 下载完成。。。打开myeclipse。file-import-general-preferences 选择下载的epf主题文件 3. 点击确定. 搞定;转载于:https://www.cnblogs.com/ry123/p/4032184…...
vb.net做网站/深圳网络推广软件
问题定位:后台两个接口重名,走了优先级更高的接口,接口没有过滤CSRF; 一、csrf是什么 CSRF(Cross-site request forgery)跨站请求伪造,是一种常见的web安全漏洞,概括地说就是指&…...
分销系统网站/免费发广告的平台有哪些
上天对谁都是一视同仁的,它在关上一扇门的同时,必定会打开一扇窗;无论多么糟糕的东西,世界都为其预留了位置,相信雨点不会仅仅落在你一个人的屋顶之上,相信你自己,大千世界总有属于你的角落;拥有积极乐观的…...
沧州地区做网站/外贸业务推广
一、字符串1.字符串的出现计算机发明初期,计算机主要用于做一些科学和工程的计算;而且刚开始计算机都是用来处理数值型的数据,后来引入了字符串的概念,计算机才开始进行非数值型数据的处理(其原理仍然是通过数值来模拟非数值&…...