队列的链式实现
文章目录队列的链式实现代码实现结构定义与初始化带头结点不带头结点入队尾插法带头结点不带头结点出队带头结点不带头结点查队头销毁队列的链式实现链队列是队列的链式存储结构本质上是操作受限的单链表。其解决了顺序队列循环队列“容量固定、可能溢出”的缺陷。链队列需要两个指针front队头指针指向头结点注意不是第一个数据结点。头结点的data闲置next指向真正的首元结点。rear队尾指针指向最后一个数据结点尾结点。带头结点后空队时front rear均指向头结点所有操作逻辑完全统一。图示空队 front(rear) - [头结点 | nextNULL] 入队10 front - [头结点 | next] - [10 | NULL] rear-^ 入队20 front - [头结点 | next] - [10 | next] - [20 | NULL] rear -^代码实现结构定义与初始化与顺序队列不同链队列通常将front和rear封装在一个结构体中便于函数传参。带头结点#includestdio.h#includestdlib.h#includestdbool.h// ① 结点定义与单链表完全一样typedefstructLNode{intdata;structLNode*next;}LNode;// ② 链队列定义封装了队头和队尾指针typedefstruct{LNode*front;// 队头指针指向头结点LNode*rear;// 队尾指针指向最后一个结点}LinkQueue;// 带头结点// 初始化 创建空队列创建头结点boolInitQueue(LinkQueueQ){// 1. 申请头结点空间 队尾指针也指向头结点表示空队Q.frontQ.rear(LNode*)malloc(sizeof(LNode));if(Q.frontNULL)returnfalse;// 内存分配失败// 2. 头结点的 next 置空Q.front-nextNULL;returntrue;}// 判空boolQueueEmpty(LinkQueue Q){returnQ.frontQ.rear;// 或者 Q.front-next NULL 若 front rear 则为空}// 判满 链队列不存在 “满 ”的概念// 唯一的限制是堆内存耗尽。通常不写判满函数而是在入队时检测 malloc 返回值。boolQueueFull(LinkQueue Q){returnfalse;// 理论永远不满只要内存够}不带头结点#includestdio.h#includestdlib.h#includestdbool.htypedefstructLNode{intdata;structLNode*next;}LNode;typedefstruct{LNode*front;// 队头指针指向第一个数据结点不是头结点LNode*rear;// 队尾指针指向最后一个数据结点}LinkQueue;// 不带头结点// 初始化 创建空队列不分配头结点voidInitQueue(LinkQueueQ){Q.frontNULL;// 直接置空Q.rearNULL;// 直接置空}// 判空boolQueueEmpty(LinkQueue Q){returnQ.frontNULL;// 只要队头为空队列就为空// 也可以这样判断Q.rear NULL;}入队尾插法带头结点步骤新建结点 → 接到rear后面 → 更新rear为新结点// 带头结点// 入队 在队尾rear 后面插入元素 eboolEnQueue(LinkQueueQ,inte){// 1. 申请新结点空间LNode*s(LNode*)malloc(sizeof(LNode));if(sNULL)returnfalse;// 内存耗尽相当于 “队满 ”// 2. 初始化新结点s-datae;s-nextNULL;// 3. 将新结点挂到当前尾结点后面Q.rear-nexts;// 4. 尾指针后移指向新的尾结点Q.rears;returntrue;}不带头结点// 不带头结点// 入队 在队尾插入元素 eboolEnQueue(LinkQueueQ,inte){LNode*s(LNode*)malloc(sizeof(LNode));if(sNULL)returnfalse;s-datae;s-nextNULL;// 必须特别判断是不是第一个结点// 不带头结点的队列第一个元素入队时需要特别处理if(Q.frontNULL){// 情况1空队front 和 rear 都指向新结点Q.fronts;// 修改队头队尾指针Q.rears;}else{// 情况2非空队挂在尾结点后面Q.rear-nexts;// 新结点插入到 rear 结点之后Q.rears;// 修改 rear 指针}returntrue;}出队删除队头第一个有效结点特殊边界如果删除后队列为空需要将rear重置回头结点防止rear悬空。带头结点删除头结点的后继。// 带头结点// 出队 删除队头元素并通过 e 带回其值boolDeQueue(LinkQueueQ,inte){// 1. 判空if(Q.frontQ.rear)returnfalse;// 2. p 指向首元结点第一个数据结点LNode*pQ.front-next;ep-data;// 保存数据// 3. 头结点跨过 p指向 p 的下一个结点Q.front-nextp-next;// 注意如果 p 恰好是最后一个结点即出队后队列变空// 必须把 rear 重新指向头结点否则 rear 将指向已释放的内存if(pQ.rear){Q.rearQ.front;}// 4. 释放 p 结点内存free(p);returntrue;}不带头结点// 不带头结点// 出队 删除队头元素并通过 e 带回其值boolDeQueue(LinkQueueQ,inte){// 1. 判空if(Q.frontNULL)returnfalse;// 2. p 指向队头结点直接就是 frontLNode*pQ.front;ep-data;// 3. 队头指针后移指向下一个数据结点Q.frontp-next;// 如果删除的是唯一结点出队后队列变空if(Q.frontNULL){// 必须把 rear 也置为 NULL否则 rear 指向已释放的内存Q.rearNULL;}// 或这样写// if(Q.rear p ){// Q.rear NULL;// Q.front NULL;// }free(p);returntrue;}查队头// 带头结点// 查队头 只读操作不删除元素boolGetHead(LinkQueue Q,inte){if(Q.frontQ.rear)// 空队returnfalse;eQ.front-next-data;// 头结点的后继才是第一个数据returntrue;}// 不带头结点// 查队头 只读操作boolGetHead(LinkQueue Q,inte){if(Q.frontNULL)returnfalse;eQ.front-data;// front 直接指向数据结点无需绕 -nextreturntrue;}销毁// 带头结点// 销毁 释放所有结点包括头结点voidDestroyQueue(LinkQueueQ){LNode*pQ.front;// p 从头结点开始while(p!NULL){LNode*qp;pp-next;free(q);}// 防止野指针虽然 Q 是引用但置空是好习惯Q.frontNULL;Q.rearNULL;}// 不带头结点// 销毁 释放所有数据结点voidDestroyQueue(LinkQueueQ){LNode*pQ.front;while(p!NULL){LNode*qp;pp-next;free(q);}Q.frontNULL;Q.rearNULL;}链队列是采用链式存储结构的队列通常使用带头结点的单链表实现并附设front和rear两个指针分别指向头结点和尾结点。入队操作对应单链表的尾插法rear-next s; rear s;出队操作对应删除头结点的后继结点。在出队时若被删结点是尾结点必须将rear重置为front。链队列克服了顺序队列容量固定的缺陷入队、出队、判空操作的时间复杂度均为O(1)。

相关新闻

提升Calibre图书管理效率:NLCISBNPlugin与其他元数据插件对比分析

提升Calibre图书管理效率:NLCISBNPlugin与其他元数据插件对比分析

提升Calibre图书管理效率:NLCISBNPlugin与其他元数据插件对比分析 【免费下载链接】NLCISBNPlugin 基于中国国家图书馆ISBN检索的calibre的source/metadata插件。https://doiiars.com/article/NLCISBNPlugin 项目地址: https://gitcode.com/gh_mirrors/nl/NLCISBN…

2026/7/26 15:00:38 阅读更多 →
Triangles Lambertian反射技术原理:打造真实3D光照效果

Triangles Lambertian反射技术原理:打造真实3D光照效果

Triangles Lambertian反射技术原理:打造真实3D光照效果 【免费下载链接】triangles Delaunay triangulation Lambertian reflectance 项目地址: https://gitcode.com/gh_mirrors/tr/triangles 想要为你的网页或应用添加令人惊艳的3D视觉效果吗?T…

2026/7/25 10:29:56 阅读更多 →
DryIoC依赖注入容器:.NET高性能DI实战指南

DryIoC依赖注入容器:.NET高性能DI实战指南

1. DryIoC 容器入门指南DryIoC 是 .NET 生态中一个轻量级但功能强大的依赖注入容器,它以高性能和易用性著称。作为一个从业多年的 .NET 开发者,我在多个企业级项目中深度使用过 DryIoC,今天就来分享这个强大工具的实战经验。与常见的 Unity、…

2026/7/22 18:15:31 阅读更多 →

最新新闻

AI Agent核心原理与实战应用解析

AI Agent核心原理与实战应用解析

1. AI Agent的本质与核心特征AI Agent(人工智能代理)本质上是一个能够自主感知环境、做出决策并执行行动的智能系统。不同于传统程序需要明确指令才能运行,AI Agent具备一定程度的自主性和适应性。这就像你雇佣了一位专业助理——你只需要告诉…

2026/7/26 16:16:28 阅读更多 →
UE5 RPG游戏动态交互高亮系统:基于GAS与后处理材质的实现方案

UE5 RPG游戏动态交互高亮系统:基于GAS与后处理材质的实现方案

1. 项目概述:从静态世界到动态交互的进化 在UE5里做RPG,尤其是想往3A品质靠拢,一个绕不开的痛点就是交互反馈。传统的做法,比如玩家靠近一个可拾取物品,我们可能就简单地在它头顶显示一个UI图标,或者改变一…

2026/7/26 16:16:28 阅读更多 →
pdf怎么转换成excel表格?合并单元格和跨页表,这两关过了才敢汇总

pdf怎么转换成excel表格?合并单元格和跨页表,这两关过了才敢汇总

上周五财务群里丢来一份「三季度费用明细」PDF,说是客户系统直接导出的,要我把里面的数汇总进自家台账。文件一共八页,中间三页是跨页大表,还有好几处合并单元格把科目名称盖住了半行。我先复制粘贴进表格软件,数字全变…

2026/7/26 16:16:28 阅读更多 →
共享骑手系统:从外卖到万物的智能配送架构解析

共享骑手系统:从外卖到万物的智能配送架构解析

1. 共享骑手系统的跨界潜力解析 "诚心呈意共享骑手系统"最初作为外卖配送解决方案出现在大众视野,但它的底层架构设计远比表面看到的要复杂。这套系统本质上是一个动态资源调度平台,其核心价值在于将碎片化的运力资源与即时性配送需求进行智能…

2026/7/26 16:16:28 阅读更多 →
怎么把多个pdf合并成一个?页序对了,合并才算真正完成

怎么把多个pdf合并成一个?页序对了,合并才算真正完成

上个月帮同事交社保证明材料,窗口要求「合成一个 PDF 上传」。他手机里是扫描件,一页一个文件,一共 9 个,文件名还是 IMG_001 那种乱序。我先在青蓝PDF转换里按「封面—身份页—缴纳记录—签字页」排好再合并,一次过审…

2026/7/26 16:16:28 阅读更多 →
AI视频爆款率骤降真相(娱乐类内容衰减预警报告)

AI视频爆款率骤降真相(娱乐类内容衰减预警报告)

更多请点击: https://codechina.net 第一章:AI视频爆款率骤降真相(娱乐类内容衰减预警报告) 近期全平台AI生成短视频的爆款率出现系统性下滑——据抖音、快手、B站三方联合监测数据,2024年Q2娱乐类AI视频的平均完播率…

2026/7/26 16:15:27 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻