队列的链式实现
文章目录队列的链式实现代码实现结构定义与初始化带头结点不带头结点入队尾插法带头结点不带头结点出队带头结点不带头结点查队头销毁队列的链式实现链队列是队列的链式存储结构本质上是操作受限的单链表。其解决了顺序队列循环队列“容量固定、可能溢出”的缺陷。链队列需要两个指针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/8/17 18:28:13 阅读更多 →
Triangles Lambertian反射技术原理:打造真实3D光照效果

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

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

2026/8/18 8:21:13 阅读更多 →
DryIoC依赖注入容器:.NET高性能DI实战指南

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

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

2026/8/18 8:21:05 阅读更多 →

最新新闻

unrpa 解包工具完整上手:一条命令提取 Ren‘Py 游戏全部资源

unrpa 解包工具完整上手:一条命令提取 Ren‘Py 游戏全部资源

unrpa 解包工具完整上手:一条命令提取 RenPy 游戏全部资源 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 你是否遇到过这样的场景:下载了一款 RenPy 引擎…

2026/8/18 15:01:24 阅读更多 →
RTOS延时机制解析:从osDelay到阻塞延时的本质区别与应用

RTOS延时机制解析:从osDelay到阻塞延时的本质区别与应用

1. 从“卡住”到“让位”:理解RTOS延时的本质 在嵌入式裸机开发里,想让程序“等一会儿”,最常见的做法就是写个 for 循环或者 while 循环,在里面空转,靠CPU指令周期来“硬耗”时间。这种做法简单直接,但…

2026/8/18 15:01:24 阅读更多 →
Sorting-Algorithms-Blender 环境搭建教程:从零安装 Blender 并运行 Python 脚本的完整清单

Sorting-Algorithms-Blender 环境搭建教程:从零安装 Blender 并运行 Python 脚本的完整清单

Sorting-Algorithms-Blender 环境搭建教程:从零安装 Blender 并运行 Python 脚本的完整清单 【免费下载链接】Sorting-Algorithms-Blender Sorting algorithms visualized using the Blender Python API. 项目地址: https://gitcode.com/gh_mirrors/so/Sorting-Al…

2026/8/18 15:01:24 阅读更多 →
5 步让蛐蛐(QuQu)上岗:免费开源的中文语音转文字工具与国产 AI 模型接入完整指南

5 步让蛐蛐(QuQu)上岗:免费开源的中文语音转文字工具与国产 AI 模型接入完整指南

5 步让蛐蛐(QuQu)上岗:免费开源的中文语音转文字工具与国产 AI 模型接入完整指南 【免费下载链接】ququ 开源免费的 Wispr Flow 替代方案 | 集成FunASR本地模型和可配置大语言模型的下一代中文桌面语音工作流 项目地址: https://gitcode.com/gh_mirrors/qu/ququ …

2026/8/18 15:01:24 阅读更多 →
键盘重映射从入门到自救:免费工具SharpKeys的完整实操笔记

键盘重映射从入门到自救:免费工具SharpKeys的完整实操笔记

键盘重映射从入门到自救:免费工具SharpKeys的完整实操笔记 【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 项目地址: https://gitcode.com/gh_mirrors/sh/sharpkeys …

2026/8/18 15:01:24 阅读更多 →
如何为Galileo 2设计自己的模组?从图纸到打印件的完整开发教程

如何为Galileo 2设计自己的模组?从图纸到打印件的完整开发教程

如何为Galileo 2设计自己的模组?从图纸到打印件的完整开发教程 【免费下载链接】Galileo2 项目地址: https://gitcode.com/gh_mirrors/ga/Galileo2 Galileo 2 是开源 3D 打印社区中备受好评的挤出机与 Z 轴驱动项目,包含适用于 Voron Stealthbur…

2026/8/18 15:00:24 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →