手撕环形数组(环形缓冲区),一步一步最细讲解

缓冲区的作用是缓存数据,防止数据丢失,通过使用数组和循环结构,可以实现缓冲区的模拟。不多废话直接进入正题。

1. 首先我们定义一个含有8个地址(8个元素)的数组 Buf [7] ,黄色填充部分表示当前的地址可以写入数据

2. head表示数组的头部,当进行read读操作时,head右移;tail表示数组的尾部,当进行write写操作时,tail右移。现在我们将字符串"HELLO"写入数组当中

……

……

……

3. 到此"HELLO"填充进数据前5个地址且一直没有读取数据(写入的数据没有进行处理),所以head/read没有移动。

4. 继续重复将"HELLO"填充进数组,当填充到"HEL"时数组填满

5. 此时,如果对已经填充(写入)的数据进行读取(处理写入的数据),那么处理n个地址的数据,head/read就会向前移动n个地址,经过处理之后的数据的地址(黄色部分)就可以继续重新被新的数据填充(写入),相反没有经过处理的数据的地址便不能被新的数据填充(写入)。可以理解head/read为分界线,新数据只能填充到head/read以前的地址

6. 此时,如果进行填充(写入)数据,那么tail/write便循环回从第0个地址,也就是刚开始的地址,将"HEL"后面的字符"LO",从第0个地址填充(写入)。

……

……

……

7. 如果,一直不对填充(写入)的数据进行处理(读取),那么数据填充(写入)一段时间后,tail/write=head/read,此时,认为数组填满。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值