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

链式队列【数据结构】

核心定义

定义:是一个插入删除功能受到限制的线性表

队列受到的限制和栈不太一样,栈式只能在一端进行插入和删除操作,而队列是在一端进行插入,另一端进行删除(先进先出 FIRST IN FIRST OUT)

头文件

定义队列节点结构

typedefintELEMTYPE;//有效节点typedefstructLQNode{ELEMTYPE data;structLQNode*next;}LQNode;//辅助节点typedefstructLink_Queue{structLQNode*front;//队头指针structLQNode*rear;//队尾指针}Link_Queue;

1.初始化

voidInit_LQ(Link_Queue*plq);

2.入队(用尾插模拟)

boolPush_LQ(Link_Queue*plq,ELEMTYPE val);

3.出队(用头删模拟)

boolPop_LQ(Link_Queue*plq);

4.获取队头元素值

ELEMTYPEFront_LS(Link_Queue*plq);

5.获取当前队列的有效元素个数

intSize_LQ(Link_Queue*plq);

6.判空

boolEmpty_LQ(Link_Queue*plq);

7.销毁

voidDestroy(Link_Queue*plq);

8.打印

voidShow(Link_Queue*plq);

源文件

引用的头文件

#defineCRT_NO_WARNINGS#include<stdio.h>#include<assert.h>#include<stdlib.h>#include<string.h>#include<memory.h>#include"Linked_Queue.h"

1.初始化

voidInit_LQ(Link_Queue*plq){assert(plq!=NULL);plq->front=NULL;plq->rear=NULL;}

2.入队(用尾插模拟)

boolPush_LQ(Link_Queue*plq,ELEMTYPE val){assert(plq!=NULL);LQNode*newnode=(LQNode*)malloc(sizeof(LQNode));if(newnode==NULL)exit(EXIT_FAILURE);newnode->data=val;if(Empty_LQ(plq)){newnode->next=NULL;plq->front=plq->rear=newnode;returntrue;}newnode->next=plq->rear->next;plq->rear->next=newnode;plq->rear=newnode;returntrue;}

3.出队(用头删模拟)

boolPop_LQ(Link_Queue*plq){assert(plq!=NULL);if(Empty_LQ(plq))returnfalse;LQNode*q=plq->front;if(plq->front->next==NULL){free(plq->front);plq->rear=NULL;plq->front=NULL;returntrue;}plq->front=q->next;free(q);q=NULL;returntrue;}

4.获取队头元素值

ELEMTYPEFront_LS(Link_Queue*plq){assert(plq!=NULL);if(Empty_LQ(plq))exit(EXIT_FAILURE);returnplq->front->data;}

5.获取当前队列的有效元素个数

intSize_LQ(Link_Queue*plq){assert(plq!=NULL);intcount=0;for(LQNode*p=plq->front;p!=NULL;p=p->next){count++;}returncount;}

6.判空

boolEmpty_LQ(Link_Queue*plq){assert(plq!=NULL);returnplq->front==NULL;}

7.销毁

voidDestroy(Link_Queue*plq){assert(plq!=NULL);LQNode*p=plq->front;LQNode*q=NULL;while(p!=NULL){q=p->next;free(p);p=q;}plq->front=plq->rear=NULL;}

8.打印

voidShow(Link_Queue*plq){assert(plq!=NULL);if(Empty_LQ(plq))return;for(LQNode*p=plq->front;p!=NULL;p=p->next){printf("%d\n",p->data);}printf("\n");}

测试函数

intmain(){Link_Queue head;Init_LQ(&head);Push_LQ(&head,1);Push_LQ(&head,2);Push_LQ(&head,3);Show(&head);Pop_LQ(&head);Show(&head);//int aim = Front_LS(&head);intaim=Size_LQ(&head);printf("%d\n",aim);Destroy(&head);}
http://www.jsqmd.com/news/578294/

相关文章:

  • Jmeter基础详解
  • 基于yolov26的荔枝成熟度检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • 酶联免疫斑点技术原理与应用
  • Step-Audio-EditX 零门槛部署与创意语音调校实战
  • 34、【Agent】【OpenCode】本地代理(收益分析)
  • OpenClaw 的模型预训练中,是否使用了文本-语音对比学习?
  • 深入Super.img:用lpunpack拆解与lpmake命令手动打包Android动态分区镜像
  • 如何彻底安全地卸载微软Edge浏览器:EdgeRemover专业指南
  • 告别网络切换烦恼:手把手教你让Android盒子同时跑满有线与无线(附开机自启脚本)
  • 4.1第一次练习作业
  • 重塑生产力:构建企业级 AI 项目经理的工程实录
  • uni.request 和 axios 的区别?前端请求库全面对比
  • 2026从APEC到进博会,标杆展览设计公司的成功密码
  • 数据隐私法规收紧对软件开发模式的重塑:软件测试从业者的挑战与机遇
  • Python爬虫实战:用Requests+Pandas批量抓取东方财富网全板块股票数据(附完整源码)
  • 小程序文件上传怎么做?一套可复用的 UniApp 上传+预览 Demo
  • python基于Hadoop的热点事件分析的设计与实现
  • JSTL 标签库 <c:forEach> 循环标签学习:数组+无序列表
  • 集成学习:为什么单打独斗不如“打群架”?(上篇)
  • 从‘失真’到‘保真’:一次搞懂手机和WIFI 6/7里DPD硬件的‘逆向思维’
  • Chrome扩展开发入门:手把手教你打造个性化New Tab页面
  • 打破设备壁垒:VR-Reversal实现3D内容自由视角全设备适配
  • 为什么 Ubuntu 24.04 不让你用 pip 了?从报错到 Python 环境管理的企业级方案
  • 跟着Cell学作图|10.蛋白质互作网络实战:GeNets数据库的机器学习驱动分析
  • 告别手动F4!SAP RAP开发中@Consumption.valueHelpDefinition的8个实战技巧与避坑指南
  • 小白小程序平台选型:5 大易上手平台深度对比 + 避坑指南 - 企业数字化改造和转型
  • 突破模型部署瓶颈:TimesFM 2.5从500M到200M的压缩实践指南
  • 呱呱赞、海橙子网、有赞、微盟、食亨:2026 外卖小程序哪家更靠谱? - 企业数字化改造和转型
  • 【声纳与人工智能融合——从理论前沿到自主系统实战(进阶篇)】第六章 旋转等变Transformer与声纳目标检测
  • LeetCode HOT100 - 寻找重复数