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

线性表之队列

  • 队列是限制在两端进行插入操作和删除操作的线性表
  • 允许进行存入操作的一端称为“队尾”允许进行删除操作的一端称为“队头”
  • 当线性表中没有元素时,称为“空队”
  • 特点 :先进先出(FIFO)或后进后出

  • 普通队列的缺点:
    • 出队后前面的空间无法重用,会造成“假溢出”
    • 当 sq->front > 0 且 sq->rear == N 时,虽然数组前面有空位,但队列已满
  • 在实际应用中,循环队列是更高效的选择,因为它避免了元素的移动,空间利用率更高。
  • 普通队列的主要缺点是空间浪费或需要移动元素的开销
  • 功能实现
#include<stdio.h>#include<stdlib.h>#include<string.h>sequeue*queue_create(){sequeue*sq;if((sq=(sequeue*)malloc(sizeof(sequeue)))==NULL){printf("malloc failed\n");returnNULL;}memset(sq->data,0,sizeof(sq->data));sq->front=sq->rear=0;returnsq;}intenqueue(sequeue*sq,datatype x){if(sq==NULL){printf("sq is NULL\n");return-1;}if(sq->rear==N){printf("sequeue is full\n");return-1;}sq->data[sq->rear]=x;sq->rear++;return0;}datatypedequeue(sequeue*sq){datatype ret;if(sq==NULL||sq->front==sq->rear){printf("queue is empty or NULL\n");return(datatype)-1;}ret=sq->data[sq->front];sq->front++;// 可选:当队列为空时,重置指针以重用空间if(sq->front==sq->rear){sq->front=sq->rear=0;}returnret;}intqueue_empty(sequeue*sq){if(sq==NULL){printf("sq is NULL\n");return-1;}return(sq->front==sq->rear?1:0);}intqueue_full(sequeue*sq){if(sq==NULL){printf("sq is NULL\n");return-1;}return(sq->rear==N?1:0);}intqueue_clear(sequeue*sq){if(sq==NULL){printf("sq is NULL\n");return-1;}sq->front=sq->rear=0;return0;}sequeue*queue_free(sequeue*sq){if(sq==NULL){printf("sq is NULL\n");returnNULL;}free(sq);returnNULL;}intqueue_length(sequeue*sq){if(sq==NULL){return-1;}returnsq->rear-sq->front;}
  • 头文件
#defineN100// 队列最大容量typedefintdatatype;// 数据类型typedefstruct{datatype data[N];// 存储队列元素intfront;// 队头指针intrear;// 队尾指针}sequeue;sequeue*queue_create();intenqueue(sequeue*sq,datatype x);datatypedequeue(sequeue*sq);intqueue_empty(sequeue*sq);intqueue_full(sequeue*sq);intqueue_clear(sequeue*sq);sequeue*queue_free(sequeue*sq);intqueue_length(sequeue*sq);
  • 测试文件
#include<stdio.h>#include"sequeue.h"intmain(intargc,constchar*argv[]){sequeue*sq;if((sq=queue_create())==NULL){return-1;}enqueue(sq,10);enqueue(sq,100);enqueue(sq,1000);while(!queue_empty(sq)){printf("dequeue:%d\n",dequeue(sq));}queue_free(sq);return0;}
http://www.gsyq.cn/news/106708.html

相关文章:

  • 轨迹规划学习记录 —— Optimal Boundary Value Problem (OBVP)
  • 交通信号仿真软件:Vistro_(4).交通网络建模
  • AXI-A7.4.6 Atomic transaction signaling
  • AXI-A7.4.7 Transaction structure
  • 交通信号仿真软件:Vistro_(5).交通流仿真设置
  • 4、创建交互式脚本指南
  • 交通信号仿真软件:Vistro_(1).Vistro软件介绍
  • ComfyUI插件生态盘点:提升效率的必备扩展推荐
  • 17、人机工业物联网系统集成:设计与评估方法
  • 18、工业人机物理系统集成的数字化与控制评估
  • 2025 Web 安全就业全景指南:四阶段零基础进阶路径 + 岗位适配清单,一文掌握拿 offer 技巧
  • 交通信号仿真软件:Vistro_(12).交通信号仿真案例研究
  • 三步掌握WVP-GB28181-Pro视频监控平台:从部署到性能调优全流程
  • 25、工业信息物理系统数字化与控制及其对建筑和医疗行业的影响
  • XXPermissions框架架构深度剖析:从设计哲学到工程实践
  • VSC#搭配C++动态链接库开发OpenCV
  • 251215不知不觉又快三点了
  • 泉盛UV-K5固件升级终极指南:LOSEHU固件5分钟快速上手
  • 55、Linux脚本与系统故障排除全解析
  • STL转STEP完全指南:从3D打印到工程设计的无缝衔接
  • Java计算机毕设之基于springboot高校师资管理系统基于springboot高校师资资源管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于SpringBoot+Vue果蔬种植销售一体化服务平台的设计与实现基于springboot果蔬种植销售一体化服务平台的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于Spring Boot的设备维护管理平台开发基于springboot工厂生产设备维护管理系统的设计(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于SpringBoot + Vue的工资信息管理系统基于springboot工资管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 计算机Java毕设实战-基于SpringBoot+Vue的奖学金评定管理系统基于springboot高校学生奖学金评定系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Google:智能体的质量(202511中文版)(附下载)
  • 3步掌握免费MIDI编辑器:从零开始你的音乐创作之旅
  • IPD最全流程框架设计(附下载)
  • Linux 内核设计中的核心思想与架构原则
  • 解锁ROG主板隐藏监控功能:T Sensor温度探头完整配置手册