当前位置: 首页 > 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.hskmm.com/?act=detail&tid=31790

相关文章:

  • C语言学习——键盘录入
  • 2025年10月软件开发公司最新推荐,软件定制开发,crm系统定制软件开发,管理系统软件开发,物联网软件开发公司推荐!
  • C语言学习——运算符的学习
  • 第十五篇
  • 数据结构-双向循环链表
  • 数据结构-顺序栈
  • Erlang 的英文数字验证码识别系统设计与实现
  • 使用Django从零开始构建一个个人博客系统 - 实践
  • 2025年磨床厂家TOP企业品牌推荐排行榜,平面磨床,外圆磨床,数控平面磨床,数控外圆磨床,7163平面磨床推荐这十家公司!
  • cifar10
  • [LangChain] 02. 模型接口
  • 摄像头调试
  • C语言学习——字符串数据类型
  • 感知节点@4@ ESP32+arduino+ 第二个程序 LED灯显示
  • WebGL学习及项目实战(第02期:绘制一个点)
  • 2025 年 10 月国内加工中心制造商最新推荐排行榜:涵盖立式、卧式、龙门及多规格型号!
  • display ip routing-table protocol ospf 概念及题目 - 详解
  • C语言学习——小数数据类型
  • 高敏感人应对焦虑
  • Palantir本体论以及对智能体建设的价值与意义
  • 2025 年执业兽医资格证备考服务机构推荐榜,执业兽医资格证培训机构/执兽考试机构/考试辅导机构获得行业推荐
  • [LangChain] 基本介绍
  • 题解:P6755 [BalticOI 2013] Pipes (Day1)
  • Palantir 的“本体工程”的核心思路、技术架构与实践示例
  • P14164 [ICPC 2022 Nanjing R] 命题作文
  • C语言学习——整数变量
  • 语音合成技术从1秒样本学习表达风格
  • 我的高敏感和家人
  • 对称多项式
  • usb储存之BOT/UAS内核驱动