<C语言>数据结构:环形缓冲区RingBuffer

数据结构:环形缓冲区

​ 当有大量数据的时候,我们不能存储所有的数据,那么计算机处理数据的时候,只能先处理先来的,那么处理完后呢,就会把数据释放掉,再处理下一个。那么,已经处理的数据的内存就会被浪费掉。因为后来的数据只能往后排队,如过要将剩余的数据都往前移动一次,那么效率就会低下了,肯定不现实,所以,环形队列就出现了。环形缓冲区是一项很好的技术,不用频繁的分配内存,而且在大多数情况下,内存的反复使用也使得我们能用更少的内存块做更多的事。
在这里插入图片描述

头文件

//ringbuffer.h
#ifndef _RINGBUFFER_H_
#define _RINGBUFFER_H_

#include "string.h"
#include "stdint.h"

/*
 *声明缓冲区结构体
 *param 1:数据缓存地址
 *param 2:掩码
 *param 3:读指针、写指针
 */
struct Ringbuffer {
   
   
    uint8_t *data;
    uint16_t mask;
    uint16_t put_ptr, get_ptr;
};
//初始化缓冲区,绑定内存地址
void        Ringbuffer_init(struct Ringbuffer *r, uint8_t *a,uint16_t size);
//清空缓冲区
void        Ringbuffer_clear(struct Ringbuffer *r);
//向缓冲区插入数据,写指针+1
uint8_t     Ringbuffer_push(struct Ringbuffer *r, uint8_t c);
//从缓冲区获取数据,读指针+1
uint8_t     Ringbuffer_pop(struct Ringbuffer *r);
//返回缓冲区总长度
uint16_t    Ringbuffer_size(struct Ringbuffer *r);
//返回缓冲区当前存储的元素的个数
uint16_t    Ringbuffer_elements(struct Ringbuffer *r);
//返回当前读指针后第n个位置的一个字节,读指针不移动
uint8_t     Ringbuffer_get_n(struct Ringbuffer *r,uint16_t n);
//获取当前读指针后长度为n的字符串,读指针移动相应长度
uint8_t     Ringbuffer_get_str(struct Ringbuffer *r,uint8_t* dst
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值