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

数据结构队列详解:从概念到代码实现

个人专栏《数据结构-初阶》《经典OJ题目》《C语言》欢迎各位大佬交流目录一、队列的概念及结构1、队列的基本概念2、队列的结构二、代码实现0、初始化1、入队2、出队3、获取队头元素4、获取队尾元素5、获取队列中有效元素个数6、检测队列是否为空7、销毁队列三、测试代码1、测试入队 出队 判空2、测试获取队头元素3、测试获取队尾元素一、队列的概念及结构1、队列的基本概念队列是一种线性数据结构遵循**先进先出FIFO, First In First Out**原则最早进入队列的元素最先被移除类似于现实生活中的排队场景队列的操作通常限制在两端进行元素从队尾rear入队从队头front出队2、队列的结构队列的存储结构既可以用数组来实现也可以用链表来实现注意此处我们说的链表是单链表不考虑双向链表是因为双向链表空间较大且双向链表功能复杂性能较低那么到底是用数组来实现栈还是链表呢同样地我们和分析栈的实现方式一样通过一些操作的时间复杂度来来进行分析a、对于入队而言如果是链表实现的队列首先需要找到队尾元素这样就需要O(N)级别的时间复杂度如果是数组实现的队列我们可以判断完空间情况后直接利用 top 尾插属于O(1)级别b、对于出队而言如果是链表实现的队列更改释放完头节点后更改头节点即可O(1)级别如果是数组实现的队列想要出队就需要从第二个节点开始均向前挪动一位属于O(N)级别显然我们不想频繁地移动数据但是如果使用链表的话入队又是O(N)级别的该怎么优化呢为什么入队是O(N)级别的是因为每次都需要遍历一遍队列才能找到最后一个节点那不妨我们在设计参数时带上尾指针这样不就将O(N)降低到了O(1)级别吗这样的话我们在入队时传入的参数就有三个分别是头指针尾指针变量x并且传入的还得是二级指针这样就使得函数看起来很冗余能不能再优化一下如果我们定义一个结构体包含头尾指针会怎样这样每次传入只需要传入这个结构体的地址即可并且用一级指针来接收完全可行这样就使得函数显得简洁、高效综上我们选择用链表来实现队列二、代码实现注意我们是用链表来实现栈说明由于队列的实现较为简单因此所有函数都封装好之后再一起测试首先来完成准备工作同样创建三个文件Queue.c、Queue .h、test.c接着定义出Queue结构体#include stdio.h #include stdlib.h #include assert.h #include stdbool.h typedef int QDatatype; //定义Queue typedef struct QListNode { struct QListNode* next; QDatatype val; }QNode; typedef struct Queue { QNode* phead; QNode* ptail; }Queue;0、初始化分析逻辑将Queue结构体中phead 和 ptail 置为空//初始化 void QueueInit(Queue* pq) { assert(pq); pq-phead pq-ptail NULL; //在获取队列中有效元素个数中说明size pq-size 0; }1、入队分析逻辑首先申请节点空间记得将 val 置为 xnext 置为空接着判断是否是入队的第一个元素如果是就要修改头尾指针否则就直接像链表尾插操作一样//入队 void QueuePush(Queue* pq, QDatatype x) { assert(pq); assert(pq-phead); //申请节点 QNode* newnode (QNode*)malloc(sizeof(QNode)); if (newnode NULL) { perror(malloc failed!\n); return; } newnode-val x; newnode-next NULL; if (pq-ptail NULL) { //第一个入队元素 pq-phead pq-ptail newnode; } else { //直接在队尾插入 pq-ptail-next newnode; pq-ptail newnode; } //在获取队列中有效元素个数中说明size pq-size; }2、出队分析逻辑注意出队是从头节点那一端出队由链表中头删的经验可知无论是一个元素还是多个元素删除逻辑都是一样的因此我们先暂存头节点的下一个节点next接着 free 头节点最终将 next 赋值给 头节点最后一个元素出队后将尾指针置为空//出队 void QueuePop(Queue* pq) { assert(pq); //队列不能为空 assert(pq-size 0); QNode* next pq-phead-next; free(pq-phead); pq-phead next; if (pq-phead NULL) { pq-ptail NULL; } //在获取队列中有效元素个数中说明size pq-size--; }3、获取队头元素分析逻辑直接返回头节点的 val 即可//获取队头元素 QDatatype QueueFront(Queue* pq) { assert(pq); assert(pq-phead); return pq-phead-val; }4、获取队尾元素分析逻辑直接返回尾节点的 val 即可//获取队尾元素 QDatatype QueueBAck(Queue* pq) { assert(pq); assert(pq-ptail); return pq-ptail-val; }5、获取队列中有效元素个数分析逻辑注意不能直接用尾指针 - 头指针两者并非顺序存储那难道还要遍历一遍队列吗我们直接在定义头尾指针的结构体中加入 size 变量用 size 统计元素个数此时我们就需要更新我们上面的代码更新 pq-size //获取队列中有效元素个数 int QueueSize(Queue* pq) { //不能直接用尾指针 - 头指针 //两个指针并非顺序存储 assert(pq); return pq-size; }6、检测队列是否为空分析逻辑其实就是判断头指针或尾指针是否等于NULL//检测队列是否为空 bool QueueEmpty(Queue* pq) { assert(pq); //return pq-phead NULL; //在获取队列中有效元素个数中说明size return pq-size 0; }7、销毁队列分析逻辑按照顺序从头到尾遍历一遍按顺序销毁即可最终在执行完函数之后记得显式将结构体指针置为空因为传入的是一级结构体指针无法修改指针本身//销毁队列 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; }三、测试代码1、测试入队 出队 判空2、测试获取队头元素3、测试获取队尾元素如有不足之处恳请指出

相关文章:

数据结构队列详解:从概念到代码实现

个人专栏:《数据结构-初阶》《经典OJ题目》《C语言》 欢迎各位大佬交流! 目录 一、队列的概念及结构 1、队列的基本概念 2、队列的结构 二、代码实现 0、初始化 1、入队 2、出队 3、获取队头元素 4、获取队尾元素 5、获取队列中有效元素个数 …...

如何快速搭建个人音乐云:Navidrome音乐服务器完整部署指南

如何快速搭建个人音乐云:Navidrome音乐服务器完整部署指南 【免费下载链接】navidrome 🎧 Your Personal Streaming Service 项目地址: https://gitcode.com/gh_mirrors/na/navidrome 厌倦了付费音乐订阅服务的限制,却又渴望随时随地…...

3分钟学会:如何用MPC Video Renderer让你的视频画质提升200% [特殊字符]

3分钟学会:如何用MPC Video Renderer让你的视频画质提升200% 🚀 【免费下载链接】VideoRenderer Внешний видео-рендерер 项目地址: https://gitcode.com/gh_mirrors/vi/VideoRenderer 还在为Windows视频播放器平淡的画质而烦…...

AUTOSAR CANTP配置避坑指南:从状态机到流控参数实战解析

AUTOSAR CANTP配置避坑指南:从状态机到流控参数实战解析 在汽车电子控制单元(ECU)开发中,诊断通信的可靠性直接影响整车调试与售后服务的效率。作为UDS诊断协议的核心传输层,CANTP模块的配置质量往往决定了诊断通信的稳…...

题解:洛谷 P9753 [CSP-S 2023] 消消乐

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

2026届学术党必备的六大AI学术平台实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作范畴之内,AI论文工具正演变为研究者颇为得力的助手。此等工具一般会集…...

别再只用单一颜色了!Origin柱状图进阶玩法:堆积图与渐变填充的混合使用指南

Origin柱状图高阶设计:用堆积与渐变填充打造科研级数据可视化 科研图表从来不是简单的数据罗列,而是信息的艺术化表达。当审稿人面对千篇一律的柱状图时,一份巧妙结合堆积结构与渐变色彩的数据可视化作品,往往能成为论文中最具记忆…...

扩散模型语义泄漏问题与DeLeaker解决方案

1. 项目概述文本到图像(T2I)生成模型近年来取得了显著进展,但在处理多实体场景时仍面临"语义泄漏"这一关键挑战。语义泄漏指的是模型在生成过程中,不同实体间的语义特征发生意外迁移的现象。例如,当提示词要…...

【企业级AI沙箱部署白皮书】:从本地PoC到金融级生产环境的7步合规迁移路径

更多请点击: https://intelliparadigm.com 第一章:企业级AI沙箱部署白皮书概述 企业级AI沙箱是保障模型研发安全、合规与可复现的核心基础设施,它通过资源隔离、权限分级、行为审计与环境快照四大能力,在生产边缘构建可控的AI实验…...

Docker AI Toolkit 2026配置仅需117秒?实测Kubernetes Operator集成、Wasm边缘推理支持与CI/CD流水线嵌入全流程

更多请点击: https://intelliparadigm.com 第一章:Docker AI Toolkit 2026核心特性概览与版本演进分析 Docker AI Toolkit 2026 是 Docker 官方联合 PyTorch、ONNX Runtime 与 Hugging Face 社区推出的首个面向生产级 AI 工作流的原生容器化工具套件。它…...

【国家药监局AI三类证申报核心材料】:Python医疗影像算法验证包(含重复性测试、对抗攻击鲁棒性报告、亚组偏倚分析模板)

更多请点击: https://intelliparadigm.com 第一章:国家药监局AI三类证申报的合规性框架与Python医疗影像算法验证全景图 国家药品监督管理局(NMPA)对人工智能医疗器械实施分类管理,其中AI三类证适用于高风险、直接影响…...

VS Code Copilot Next工作流配置终极方案:如何在30分钟内完成ISO 27001审计就绪配置?(含Azure AD联合身份验证实操)

更多请点击: https://intelliparadigm.com 第一章:VS Code Copilot Next工作流配置的企业级安全定位与ISO 27001合规映射 VS Code Copilot Next 并非通用代码补全工具的简单升级,而是面向企业级开发生命周期设计的**策略感知型AI协作者**。其…...

为什么你的FastAPI+Llama3服务QPS不到80?:揭秘Python asyncio与KV Cache内存布局冲突的底层真相

更多请点击: https://intelliparadigm.com 第一章:Python AI 原生应用推理加速 现代 Python AI 应用正面临推理延迟高、内存占用大、GPU 利用率不均等瓶颈。原生加速并非仅依赖硬件升级,而是需在模型编译、运行时调度与 Python 生态协同三个…...

华硕笔记本的“瘦身“秘籍:3分钟让G-Helper成为你的性能管家

华硕笔记本的"瘦身"秘籍:3分钟让G-Helper成为你的性能管家 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, …...

Rust高性能网络抓包框架karasu:从零构建安全高效的流量分析工具

1. 项目概述:从“scozu/karasu”看开源项目命名背后的技术哲学最近在GitHub上闲逛,又发现了一个名字挺有意思的项目——scozu/karasu。乍一看,这像是一个典型的个人开发者仓库,用户名scozu加上项目名karasu。karasu在日语里是“乌…...

RAG-Anything横空出世!文字、图片、表格、公式,文档里的“一切”都能搜!

传统RAG仅支持文本检索,面对图表、公式等非文本内容束手无策。RAG-Anything在LightRAG基础上,通过多模态扩展层,将文档中的文字、图片、表格、公式等所有内容统一纳入知识图谱,并支持VLM增强查询和多模态查询模式,极大…...

大模型微调速成:20天入门,1个月精通,附完整学习路线!

上次分享的AI路径规划学习路线,小点在后台收到了不少学员的好评!还有不少人私信小点:“大模型微调怎么入门?”“看了很多资料,还是不知道先学啥”“学了半个月,连环境配置都没搞定”…… 那么今天&#xff…...

本地语音AI助手构建指南:从Whisper、LLM到TTS的完整实践

1. 项目概述:打造一个完全离线的本地语音AI助手 几年前,当ChatGPT刚刚崭露头角时,一个想法让我非常着迷:能不能有一个完全运行在自己电脑上的语音助手?它不需要连接任何云端服务,所有的对话、思考和语音合成…...

【2026年最新600套毕设项目分享】基于微信的高校教务管理系统(30189)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 项目演示视频2 项目演示视频3 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远…...

如何让ESP32设备听懂人话?小智AI聊天机器人终极指南

如何让ESP32设备听懂人话?小智AI聊天机器人终极指南 【免费下载链接】xiaozhi-esp32 An MCP-based chatbot | 一个基于MCP的聊天机器人 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 你是否曾经想象过,一个简单的嵌入式设备…...

逆向工程工具:基于PE加载器的反作弊绕过技术实现

逆向工程工具:基于PE加载器的反作弊绕过技术实现 【免费下载链接】VAC-Bypass-Loader Loader for VAC Bypass written in C. 项目地址: https://gitcode.com/gh_mirrors/va/VAC-Bypass-Loader VAC-Bypass-Loader是一款采用C语言编写的Windows PE加载器&#…...

TrollInstallerX深度解析:专业级iOS TrollStore安装工具实战指南

TrollInstallerX深度解析:专业级iOS TrollStore安装工具实战指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX是一款专业级的iOS TrollSt…...

LLM风险预测与干预的优化策略

1. 问题本质:预测与干预的鸿沟大型语言模型(LLM)在风险预测领域展现出惊人的准确率,但我们在实际部署中发现一个矛盾现象:系统能提前72小时以92%的准确率预测到用户风险行为,实际干预成功率却不足35%。这个…...

【收藏备用|2026版】Java开发者秋招破局+大模型学习指南,小白/程序员必看!

本文针对2026年Java开发者(含小白、初级程序员)求职中最突出的四大高频短板——基础不牢、框架底层空白、项目深度不足、分布式能力薄弱,结合当下大模型技术趋势,提供详细的破局方案与学习路径。文章重点强调JVM、多线程、框架源码…...

收藏!2026年版3大高潜力大模型细分赛道,程序员零基础转行必看

当下2026年大模型技术全面赋能各行各业,数字化AI改造已成企业刚需,越来越多后端、前端、全栈程序员都在寻求职业破局,将大模型相关技术转型当作突破职场瓶颈、抓取时代行业红利的关键选择。提起大模型行业,大多数人第一时间只会想…...

终极密码恢复方案:基于7zip引擎的高效压缩包密码测试工具深度解析

终极密码恢复方案:基于7zip引擎的高效压缩包密码测试工具深度解析 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 在数字资产管…...

告别B站观影烦恼:BiliRoamingX解锁完整观影体验的终极指南

告别B站观影烦恼:BiliRoamingX解锁完整观影体验的终极指南 【免费下载链接】BiliRoamingX-integrations BiliRoamingX integrations and patches powered by ReVanced. 项目地址: https://gitcode.com/gh_mirrors/bi/BiliRoamingX-integrations 你是否曾因地…...

【仅限首批200名开发者】Docker WASM边缘部署速成包:含预编译镜像、安全沙箱策略、可观测性埋点模板——限时开放下载

更多请点击: https://intelliparadigm.com 第一章:Docker WASM 边缘计算部署指南 如何实现快速接入 WebAssembly(WASM)正成为边缘计算场景中轻量、安全、跨平台执行代码的关键载体,而 Docker 官方对 WASM 的原生支持&…...

阿里开源项目Pixelle-Video 详解:开源AI全自动短视频引擎,零门槛一键生成成片

摘要在短视频创作日益普及的今天,剪辑门槛高、创作效率低、专业技能不足等问题,成为很多人及中小团队入局短视频赛道的绊脚石。Pixelle-Video 作为一款开源的AI全自动短视频引擎,凭借“输入一个主题,一键生成完整视频”的核心能力…...

如何突破性解决QtScrcpy鼠标点击失效:3个实战技巧深度解析

如何突破性解决QtScrcpy鼠标点击失效:3个实战技巧深度解析 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScr…...