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

数据结构-循环队列

循环队列

功能实现

/**************************************************************************** * @name* @author* @date** *CopyRight (c) 2025-2026 All Right Reserved* *************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>typedef int DataType_t;     //用户自定义类型//定义结构体记录队列
typedef struct Circularqueue   
{DataType_t * Addr;      //队列首地址unsigned int Size;      //队列容量int Front;              //队列首下标int Rear;               //队列尾下标}CirQueue_t;                //别名  /**************************************************************************** * @name      	CirQueue_Create* @brief 		初始化队列* @param		* * @retval		point** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
CirQueue_t * CirQueue_Create(unsigned int size)
{CirQueue_t *Manager = (CirQueue_t *)calloc(1,sizeof(CirQueue_t));              //申请堆内存,用于管理体//判断堆内存是否申请成功if (NULL == Manager){perror("calloc memory for Manager is failled");exit(-1);               //失败退出程序}Manager->Addr = (DataType_t *)calloc(size,sizeof(DataType_t));                 //为列表申请堆内存//判断堆内存是否申请成功if (NULL == Manager->Addr){perror("calloc memory for element is failled");free(Manager);                  //失败后释放管理体内存exit(-1);}Manager->Size = size;               //列表容量Manager->Front = 0;                 //列表首下标Manager->Rear = 0;                  //列表尾下标return Manager;                     //返回用于管理体内存地址
}/**************************************************************************** * @name      	CirQueue_Create* @brief 		判断队列是否为满* @param		* * @retval		bool** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
bool CirQueue_IsFull(CirQueue_t *Manager)
{return (Manager->Rear+1%Manager->Size == Manager->Front) ? true : false;    //已满返回true,未满返回false
}/**************************************************************************** * @name      	CirQueue_Create* @brief 		判断队列是否为空* @param		* * @retval		bool** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
bool CirQueue_IsEmpty(CirQueue_t *Manager)
{return Manager->Front == Manager->Rear ? true : false;    //已空返回true
}/**************************************************************************** * @name      	enqueue* @brief 		入队* @param		* * @retval		bool** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
bool enqueue(CirQueue_t *Manager , DataType_t Data)
{if (CirQueue_IsFull(Manager))                      //判断队列是否已满{                               printf("\nCirQueue is full");                 //队列已满,退出此函数return false;   }Manager->Addr[Manager->Rear] =  Data;             //入队  Manager->Rear = (Manager->Rear+1)%Manager->Size;  //队尾指针后移return true;
}/**************************************************************************** * @name      	dequeue* @brief 		出队* @param		* * @retval		DataType_t** @author		https://www.cnblogs.com/yuhengwang* *************************************************************************/
DataType_t dequeue(CirQueue_t *Manager)
{int Temp = 0;    //定义变量记录下标//判断列表是否为空,列表为空,退出此函数if (CirQueue_IsEmpty(Manager)){printf("\nCirQueue is Empty");       return false;} Temp = Manager->Addr[Manager->Front];                   //出队Manager->Front = (Manager->Front+1)%Manager->Size;      //指针后移return Temp;}

主函数

int main(int argc , const char *argv[])
{CirQueue_t *Manager = CirQueue_Create(6);enqueue(Manager,1);   enqueue(Manager,3);   enqueue(Manager,5);printf("%d",dequeue(Manager));       enqueue(Manager,7);   enqueue(Manager,9);   enqueue(Manager,2); enqueue(Manager,4); }

运行结果

1
CirQueue is full
http://www.rkmt.cn/news/21784.html

相关文章:

  • 2025年10月软件开发公司最新推荐,软件定制开发,crm系统定制软件开发,管理系统软件开发,物联网软件开发公司推荐!
  • 数据结构-顺序栈
  • 摄像头调试
  • C语言学习——字符串数据类型
  • Palantir本体论以及对智能体建设的价值与意义
  • 深度学习调试记录 - 详解
  • C语言学习——整数变量
  • 简述flux思想?
  • 20232428 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 字符串操作函数
  • JAVA对象内存布局
  • 10月15号
  • DolphinScheduler 3.1.9 单机版重启后,项目、流程定义等数据全部丢失
  • 洛谷题单指南-进阶数论-CF776B Sherlock and his girlfriend
  • 日总结 12
  • 2025年太阳能板趋势与智能选择指南
  • 10/15
  • 深入解析:Nodejs开发环境搭建
  • 项目管理:PERT/CPM
  • 可信AI研究获资助,10位博士生探索算法公平与隐私
  • 实用指南:【在Ubuntu 24.04.2 LTS上安装Qt 6.9.2】
  • 在AI技术快速实现创意的时代,挖掘邮件营销系统新需求成为关键突破点
  • RoI Pooling / Align
  • 时延估计算法ETDGE的解析
  • 2025年10月最新房产信息公布:西安买房新楼盘口碑推荐榜单Top10精选
  • 备忘录:IDA*
  • 基于DSP28335的SVPWM矢量控制实现
  • 2025 年钢制拖链源头厂家最新推荐排行榜:聚焦优质品牌助力企业精准选购,破解市场选型难题
  • AI降噪、实时响应、闭环治理的政务数据安全管理方案 ——全知科技与教育部学位与研究生教育发展中心合作案例
  • 多维协同 一键化部署 合规可控的运营商数据安全管理方案