数据结构-循环队列

news/2025/10/15 19:59:05/文章来源:https://www.cnblogs.com/yuhengwang/p/19144135

循环队列

功能实现

/**************************************************************************** * @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.mzph.cn/news/937760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言学习——键盘录入

一.基础的定义 键盘录入用到的是scanf起作用是获取用户在键盘上输入的数据,并赋值给变量 二.示例 下面是键盘录入的格式三.练习 当我们需要在键盘上录入我们所需要的字符串时我们可以通过以下的要求和格式来进行定义下…

2025年10月软件开发公司最新推荐,软件定制开发,crm系统定制软件开发,管理系统软件开发,物联网软件开发公司推荐!

在数字化转型加速推进的当下,政企机构对软件开发服务的需求持续攀升,但行业乱象却让选型陷入困境。部分厂商存在技术架构陈旧、扩展能力不足的问题,系统上线后难以适配业务增长需求;另有服务商重开发轻服务,售后响…

C语言学习——运算符的学习

在算术运算符中有许多需要注意的过程,当然这其中所遵循的都是我们平常常见的运算规则只是其中增添了一些在计算机的运算过程中所出现的问题 1 .接下来介绍的就是C语言中运算符的基础运算,同时也是我们很早就掌握的,…

第十五篇

今天是10月15日,上了离散和马原。

数据结构-顺序栈

数据结构-顺序栈 /**************************************************************************** * @name: sequencelstack * @author: 王玉珩* @date: 2025/10/07** *CopyRight (c) 2025-2026 All Right Rese…

实用指南:NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Erlang 的英文数字验证码识别系统设计与实现

一、引言 验证码(CAPTCHA)作为互联网中抵御自动化攻击的重要安全机制,被广泛用于登录验证、注册防刷、评论防机器人等场景。 传统验证码识别常用 Python 或 C++ 实现,而本文将介绍如何用 Erlang 来构建一个基础的英…

使用Django从零开始构建一个个人博客系统 - 实践

使用Django从零开始构建一个个人博客系统 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

2025年磨床厂家TOP企业品牌推荐排行榜,平面磨床,外圆磨床,数控平面磨床,数控外圆磨床,7163平面磨床推荐这十家公司!

当前磨床市场竞争愈发激烈,产品质量参差不齐,不少企业在选购磨床时面临诸多难题。部分厂家缺乏严格的质量管控体系,生产的磨床精度不足、稳定性差,难以满足汽车摩托车、工程机械、军工等行业对加工精度的高要求;还…

cifar10

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from multiprocessing import freeze_support import sys 1. 加载和预处理数据 d…

[LangChain] 02. 模型接口

LangChain 支持两类主流语言模型:文本补全模型 对话模型文本补全模型 Text Completion Models 这类模型以一段纯文本作为输入,输出结果是一段连续生成的文字(这里的输出文本其实就是对前面输入文本的一个补全),不…

摄像头调试

camera调试经验分享 收藏 一 关于Sensor预览时有条纹: 1。电源不稳定,CMOS sensor对电源的稳定度蛮高的。 2。同步信号受干扰,彩色条纹显然是每行数据中有信号丢失造成。 3。检查mclk和pclk以及他们的ratio,软件…

软件工程作业-报告1 - 实践

软件工程作业-报告1 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

C语言学习——字符串数据类型

字符串的数据类型只有char来进行定义,相对之前的来讲较少同样打印的内容需要用引号来进行标注,同时也可以用与整数和小数的方法来进行测量字节 接下来我们对以上三种数据类型进行一个总结和概括: > 所有整数,小…

感知节点@4@ ESP32+arduino+ 第二个程序 LED灯显示

1、查看电路图,那个ESP32的引脚连接LED灯 图中看到是IO2 2、查找和打开例程Blink 3、按照电路图,定义引脚编号 4)编译下载固件 点击“上传”按钮,同时一直按住电路板上的BOOT(IO0)按钮,直到开始下载固件…

WebGL学习及项目实战(第02期:绘制一个点)

@目录目标WebGL原理示意图着色器顶点着色器:片元着色器:着色器代码如下web端(js)js代码代码结构梳理流程图完整代码(可直接在浏览器中查看)运行效果 目标使用WebgL绘制一个点 了解整个绘制的编写流程并进行梳理和…

2025 年 10 月国内加工中心制造商最新推荐排行榜:涵盖立式、卧式、龙门及多规格型号!

当前加工中心市场厂商数量繁杂,产品质量、技术实力与服务水平差异显著,汽车摩托车、工程机械、军工等行业采购方在挑选设备时,常面临不知如何辨别优质厂商、耗费大量时间调研却难觅适配产品的困境。部分厂商存在技术…

display ip routing-table protocol ospf 概念及题目 - 详解

display ip routing-table protocol ospf 概念及题目 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

C语言学习——小数数据类型

> 小数的数据类型分为:float、double > 不同的数据类型所表示的范围和内存大小都不一样可以用,由编译器来决定,可以用sizeof来决定 > 小数的取值范围比整数的大 > c语言的的小数默认double联系的…

高敏感人应对焦虑

2️⃣ 注意力外投法:从内心的泥潭中抽身 烦躁和无法学习,往往是因为注意力被困在了内心的思虑中。我们需要强行把它拉出来,投向外部世界。5-4-3-2-1感官法:具体操作:无论在何处,立刻(在心里或小声地)说出:5 个…