环形队列的实现:在计算机中,也是没有环形的内存的,只不过是我们将顺序的内存处理过,让某一段内存形成环形,使他们首尾相连,简单来说,这其实就是一个数组,只不过有两个指针,一个指向列队头,一个指向列队尾。指向列队头的指针(Head)是缓冲区可读的数据,指向列队尾的指针(Tail)是缓冲区可写的数据,通过移动这两个指针(Head) &(Tail)即可对缓冲区的数据进行读写操作了,直到缓冲区已满(头尾相接),将数据处理完,可以释放掉数据,又可以进行存储新的数据了。
实现的原理:初始化的时候,列队头与列队尾都指向0,当有数据存储的时候,数据存储在‘0’的地址空间,列队尾指向下一个可以存储数据的地方‘1’,再有数据来的时候,存储数据到地址‘1’,然后队列尾指向下一个地址‘2’。当数据要进行处理的时候,肯定是先处理‘0’空间的数据,也就是列队头的数据,处理完了数据,‘0’地址空间的数据进行释放掉,列队头指向下一个可以处理数据的地址‘1’。从而实现整个环形缓冲区的数据读写。
1/**
2* @brief Write_RingBuff
3* @param u8 data
4* @return FLASE:环形缓冲区已满,写入失败;TRUE:写入成功
5* @author 杰杰
6* @date 2018
7* @version v1.0
8* @note 往环形缓冲区写入u8类型的数据
9*/
10u8 Write_RingBuff(u8 data)
11{
12 if(ringBuff.Lenght >= RINGBUFF_LEN) //判断缓冲区是否已满
13 {
14 return FLASE;
15 }
16 ringBuff.Ring_Buff[ringBuff.Tail]=data;
17// ringBuff.Tail++;
18 ringBuff.Tail = (ringBuff.Tail+1)%RINGBUFF_LEN;//防止越界非法访问
19 ringBuff.Lenght++;
20 return TRUE;
21}
具体见我博客:https://blog.csdn.net/jiejiemcu/article/details/80563422
1