c语言 循环队列 (crud版)

//初始化

typedef struct
{
 uint16_t Head;//头指针 取出数据时移动头指针
 uint16_t Tail;//尾指针 存入数据时移动尾指针
 uint16_t Lenght;//长度  尾指针和头指针间的距离 代表存储数据的长度
 uint8_t Ring_Buff[200];//缓冲大小 申请了200长度的数组用于存取数据
}RingBuff_t;
extern RingBuff_t ringBuff; 
void RingBuff_Init();缓冲区初始化
uint8_t Write_RingBuff(uint8_t data);//入队
uint8_t Read_RingBuff(uint8_t *rData);//出队

void RingBuff_Init(void) //初始化函数
{
 ringBuff.Head=0; //头指针置于起始位
 ringBuff.Tail=0; //尾指针置于起始位
 ringBuff.Lenght=0; //计录当前数据长度 判断是否存有数据
}
//入队

uint8_t Write_RingBuff(uint8_t data) //存入指定的缓冲数组并通过数据长度判断是否溢出 返回值0正常 1溢出
{
 if(ringBuff.Lenght>=200) //200是申请的内存长度 可以修改 如果超过则为溢出
 {
  return 1; //确认数据溢出返回值1
 }
 ringBuff.Ring_Buff[ringBuff.Tail]=data;  //将数据通过尾指针指向的地址存入Ring_Buff缓冲数组中
 ringBuff.Tail=(ringBuff.Tail+1)%200;     //构建尾部指针的循环 指针累加 指针地址超过199 则重新置于0
 ringBuff.Lenght++;  //记录存入数据的长度 判断数据的存有数量和溢出情况
 return 0; //无溢出情况存入数据 返回值0
}
//出队

uint8_t Read_RingBuff(uint8_t *rData) //从指定的缓冲数组中读出头指针指向地址的数据
{
 if(ringBuff.Lenght==0)  //如果数据长度为0 则此时缓冲数组中未存有数据
 {
  return 1; //取出数据失败 返回值0
 }
 *rData=ringBuff.Ring_Buff[ringBuff.Head]; //在Ring_buff中从头指针指向的地址中取出数据
 ringBuff.Head=(ringBuff.Head+1)%200;  //构建头部指针的循环 指针累加 指针地址超过199 则重新置于0
 ringBuff.Lenght--; //取出数据时减去相应的数据长度
 return 0; //取出数据正常 返回值0
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值