一篇博客读懂队列——Queue
目录
一、队列的概念和结构
二、队列的实现
2.1队列的初始化QueueInit
2.2队列的摧毁QueueDestroy
2.3插入结点QueuePush
2.4删除结点QueuePop
2.5返回队头QueueFront
2.6返回队尾QueueBack
2.7判断队列为空QueueEmpty
2.8统计队列数目QueueSize
一、队列的概念和结构
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出性质。
FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头
二、队列的实现
队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。
当用链表实现时,我们布置的结构体肯定要包含一个val,还需要一个next。
typedef int QDataType;
typedef struct QueueNode
{QDataType val;struct QueueNode* next;
}QNode;
但结构体的布置并非到这里就结束了,当我们有数据要入队时,我们是不是需要让头指针遍历一遍链表找到队尾呢?而且要改变队尾前一个结点next的指向,是不是要传入二级指针呢?同样,当我们布置其他函数体时也会遇到类似的问题。那么如何让我们的代码量化到最简呢?
我们再设置一个结构体来存储相关的数据,这样修改指向时不用再用二级指针,而是只需要修改结构体的值即可。我们用phead指向队列的头结点,便于出队;用ptail指向队列的尾结点,便于入队
typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;
2.1队列的初始化QueueInit
void QueueInit(Queue* pq)
{assert(pq);pq->phead = pq->ptail = NULL;pq->size = 0;
}
2.2队列的摧毁QueueDestroy
void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}
2.3插入结点QueuePush
首先我们要新开结点,其次我们要判断链表是否为空,如果为空,那么ptail和phead都指向新结点;如果不为空,phead的指向不用改变,而ptail的next要只想newnode,然后再把ptail向后移
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");return;}newnode->val = x;newnode->next = NULL;if (pq->ptail == NULL){pq->ptail = pq->phead = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}
2.4删除结点QueuePop
首先先让队头指向next结点,接着我们就要判断删除的是不是整个队列的最后一个结点,如果删除的是最后一个结点,那么就会影响到我们ptail的指向,所以我们通过判断避免ptail变成野指针。
void QueuePop(Queue* pq)
{assert(pq);// assert(pq->phead);QNode* del = pq->phead;pq->phead = pq->phead->next;free(del);del = NULL;if (pq->phead == NULL)pq->ptail = NULL;pq->size--;
}
2.5返回队头QueueFront
QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->phead);return pq->phead->val;
}
2.6返回队尾QueueBack
QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->ptail);return pq->ptail->val;
}
2.7判断队列为空QueueEmpty
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead == NULL;
}
2.8统计队列数目QueueSize
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
相关文章:
一篇博客读懂队列——Queue
目录 一、队列的概念和结构 二、队列的实现 2.1队列的初始化QueueInit 2.2队列的摧毁QueueDestroy 2.3插入结点QueuePush 2.4删除结点QueuePop 2.5返回队头QueueFront 2.6返回队尾QueueBack 2.7判断队列为空QueueEmpty 2.8统计队列数目QueueSize 一、队列的概念和…...
Effective C++ 系列和 C++ Core Guidelines 如何选择?
Effective C 系列和 C Core Guidelines 如何选择? 如果一定要二选一,我会选择C Core Guidelines。因为它是开源的,有300多个贡献者,而且还在不断更新,意味着它归纳总结了最新的C实践经验。最近很多小伙伴找我ÿ…...
Sandbox: bash(5613) deny(1) file-write-create 错误解决
Showing Recent Errors Only Sandbox: bash(5613) deny(1) file-write-create /Users/xx/Dev/UniappLearn/MSLUniappDemo/Pods/resources-to-copy-MSLUniappDemo.txt image.png 解决方法 build setting搜索ENABLE_USER_SCRIPT_SANDBOXING,YES(默认&…...
腾讯云标准型S5服务器五年优惠价格表(4核8G和2核4G)
腾讯云服务器网整理五年云服务器优惠活动 txyfwq.com/go/txy 配置可选2核4G和4核8G,公网带宽可选1M、3M或5M,系统盘为50G高性能云硬盘,标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器,…...
Nginx 是如何解决惊群效应的?
什么是惊群效应? 第一次听到的这个名词的时候觉得很是有趣,不知道是个什么意思,总觉得又是奇怪的中文翻译导致的。 复杂的说(来源于网络)TLDR; 惊群效应(thundering herd)是指多进程ÿ…...
【深度学习实验】网络优化与正则化(三):随机梯度下降的改进——Adam算法详解(Adam≈梯度方向优化Momentum+自适应学习率RMSprop)
文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 随机梯度下降SGD算法a. PyTorch中的SGD优化器b. 使用SGD优化器的前馈神经网络 2.随机梯度下降的改进方法a. 学习率调整b. 梯度估计修正 3. 梯度估计修正:动量法Momen…...
如何解决网页中的pdf文件无法下载?pdf打印显示空白怎么办?
问题描述 偶然间,遇到这样一个问题,一个网页上的附件pdf想要下载打印下来,奈何尝试多种办法都不能将其下载下载,点击打印出现的也是一片空白 百度搜索了一些解决方案都不太行,主要解决方案如:https://zh…...
【JVM】类加载器 Bootstrap、Extension、Application、User Define 以及 双亲委派
以下环境为 jdk1.8 两大类 分类成员语言继承关系引导类加载器bootstrap 引导类加载器C/C无自定义类加载器extension 拓展类加载器、application 系统/应用类加载器、user define 用户自定义类加载器Java继承于 java.lang.ClassLoader 四小类 Bootstrap 引导类加载器 负责加…...
读书笔记:彼得·德鲁克《认识管理》第15章 使工作富有成效:工作和过程
一、章节内容概述 不同员工在技术熟练程度、知识掌握程度方面有所不同,但所有工 作本质上都是相同的,为了实现富有成效,需要遵循同样的步骤,划分 为同样的阶段,受到同样的对待,需要分析、综合、控制以及相…...
媒体软文投放的流程与媒体平台的选择
海内外媒体软文:助力信息传播与品牌建设 在当今数字化时代,企业如何在庞大的信息海洋中脱颖而出,成为品牌建设的领军者?媒体软文投放无疑是一项强大的策略,通过选择合适的平台,精准投放,可以实…...
【excel技巧】如何取消excel隐藏?
Excel工作表中的行列隐藏了数据,如何取消隐藏行列呢?今天分享几个方法给大家 方法一: 选中隐藏的区域,点击右键,选择【取消隐藏】就可以了 方法二: 如果工作表中有多个地方有隐藏的话,还是建…...
AIGC专栏8——EasyPhoto 视频领域拓展-让AIGC肖像动起来
AIGC专栏8——EasyPhoto 视频领域初拓展-让AIGC肖像动起来 学习前言源码下载地址技术原理储备Video Inference 功能说明 & 效果展示1、Text2Video功能说明a、实现原理简介b、文到视频UI介绍c、结果展示 2、Image2Video功能说明a、实现原理简介i、单图模式ii、首尾图模式 b、…...
C++ RBTree 理论
目录 这个性质可以总结为 红黑树的最短最长路径 红黑树的路径范围 code 结构 搞颜色 类 插入 插入逻辑 新插入节点 思考:2. 检测新节点插入后,红黑树的性质是否造到破坏? 解决方法 变色 旋转变色 第三种情况,如果根…...
制作这种在线宣传画册,可轻松收获客户!
制作企业宣传画册,首先要了解企业制作宣传画册的需求以及展示方向,如今互联网时代,宣传画册的制作也应该要创新,而制作一本在线电子宣传画册用于线上宣传是非常有必要的。如何制作呢? 我们 可以使用FLBOOK平台在线制作…...
数据结构 | 图
最小生成树算法 Prime算法 算法思路:从已选顶点所关联的未选边中找出权重最小的边,并且生成树不存在环。 其中,已选顶点是构成最小生成树的结点,未选边是不属于生成树中的边。 例子: 第一步: 假设我们从顶…...
[文件读取]shopxo 文件读取(CNVD-2021-15822)
1.1漏洞描述 漏洞编号CNVD-2021-15822漏洞类型文件读取漏洞等级⭐⭐漏洞环境VULFOCUS攻击方式 描述: ShopXO是一套开源的企业级开源电子商务系统。 ShopXO存在任意文件读取漏洞,攻击者可利用该漏洞获取敏感信息。 1.2漏洞等级 高危 1.3影响版本 ShopXO 1.4漏洞复现…...
zookeeper应用之分布式锁
在分布式系统中多个服务需要竞争同一个资源时就需要分布式锁,这里使用zookeeper的临时顺序节点来实现分布式锁。 在节点X下创建临时顺序节点,getChildren()获取节点X的所有子节点,判断当前节点是否是第一个子节点,如果是就获取锁…...
20. 机器学习——PCA 与 LDA
机器学习面试题汇总与解析——PCA 与 LDA 本章讲解知识点 什么是数据降维PCA本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一…...
深度学习准召
准确率(Precision)和召回率(Recall)是两个用来评价一个模型的好坏的指标,它们有不同的意义: 准确率(Precision):准确率是在所有被模型判断为正例的样本中,有…...
AtCoder ABC154
C - Distinct or Not 签到题,注意大小写和以前的不一样 D - Dice in Line 签到题2,用个窗口即可 E - Almost Everywhere Zero 数位DP(搜索)的例题 pos表示当前搜索到的位置(开始为0,结束为n) …...
如何用3分钟为Windows换上macOS原版鼠标指针:完整美化方案
如何用3分钟为Windows换上macOS原版鼠标指针:完整美化方案 【免费下载链接】macOS-cursors-for-Windows Tested in Windows 10 & 11, 4K (125%, 150%, 200%). With 2 versions, 2 types and 3 different sizes! 项目地址: https://gitcode.com/gh_mirrors/ma/…...
Windows 11 + CUDA 11.7 环境下,TensorRT 8.5.2.2 保姆级安装与配置避坑指南
Windows 11 CUDA 11.7 环境下 TensorRT 8.5.2.2 终极安装指南 刚接触深度学习推理优化的开发者,往往会在环境配置阶段耗费大量时间。TensorRT作为NVIDIA官方推出的高性能推理库,能够显著提升模型在NVIDIA GPU上的运行效率。本文将手把手带你完成Windows…...
【论文】信息系统项目管理师范围管理要点
本资料摘自《科科过论文集分析》,底部附PDF图片版记忆。项目管理中范围管理的六大核心环节,旨在为专业写作提供具体的实践指导与案例素材。文档强调在描述规划、需求收集和范围定义时,应避免枯燥的理论堆砌,转而通过真实的业务场景…...
告别OpenAI API费用:手把手教你用本地BGE模型+FAISS搭建LangChain私有知识库
零成本构建企业级知识库:基于BGE与FAISS的私有化LangChain解决方案 在AI应用开发领域,数据隐私和成本控制正成为越来越多开发者的核心考量。当OpenAI等商业API按调用次数收费时,频繁的查询请求可能让个人开发者和小型团队不堪重负。更关键的是…...
别只盯着训练!DeePMD-kit模型压缩(graph.pb)实战:让分子动力学模拟速度提升10倍
突破计算瓶颈:DeePMD-kit模型压缩技术实战指南 当你在分子动力学模拟中投入数周时间训练出一个高精度DeePMD模型后,是否遇到过这样的困境:想要扩大模拟体系规模或延长模拟时间,却受限于计算资源的瓶颈?模型压缩技术正是…...
3个关键场景与4步操作:深入解析RevokeMsgPatcher防撤回工具的技术实现与应用实践
3个关键场景与4步操作:深入解析RevokeMsgPatcher防撤回工具的技术实现与应用实践 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目…...
ClawdBot惊艳效果案例:PaddleOCR识别模糊手写体+LibreTranslate精准输出
ClawdBot惊艳效果案例:PaddleOCR识别模糊手写体LibreTranslate精准输出 1. 项目概述 ClawdBot是一个可以在个人设备上运行的AI助手应用,它使用vllm提供后端模型能力,为用户提供强大的多模态处理功能。这个应用特别适合需要处理文字识别和翻…...
从SENet到MaskNet:聊聊推荐系统里那些‘注意力’模块,到底谁在真正帮你提效?
从SENet到MaskNet:动态特征加权的技术演进与实战选型指南 在推荐系统的演进历程中,特征交互与动态加权始终是提升模型效果的核心突破口。2017年提出的SENet(Squeeze-and-Excitation Network)首次将通道注意力机制引入计算机视觉领…...
QWEN-AUDIO开箱即用指南:无需conda/pip,纯Docker镜像启动
QWEN-AUDIO开箱即用指南:无需conda/pip,纯Docker镜像启动 想体验一下“有温度”的AI语音合成吗?以前你可能需要折腾Python环境、安装各种依赖、处理版本冲突,光是配置环境就能劝退一大半人。今天,我要分享一个完全不同…...
Bioconductor注释包全解析:从缩写规则到实战应用
1. Bioconductor注释包入门指南 第一次接触Bioconductor注释包时,我完全被那些奇怪的缩写搞懵了。Hs、Mm、Rn这些看起来像密码的字母组合,其实是生物信息学分析中最常用的工具标识。就像医生需要熟悉药品缩写一样,搞生物数据分析也得掌握这套…...
