说明:
1.静态环形队列就是长度已提前确定,可以按顺序循环写入数据(0、1、2...9、0、1、2...);可以按顺序循环读取数据(0、1、2...9、0、1、2...);通过write记录写入个数,写一次加1;通过Read记录读取的个数,读一次加1;
2.队列满:计数其实隐性代表了数据的位置,如果下一个要写入的计数等于读取计数“Read == ((Write + 1”)说明写入已满,(比如:一个圆形跑道上有均匀10个固定的位置可以放东西或者取东西,两个人在圆形跑道上同向追赶,一个前面放东西一个后边取东西,放东西的那个人将要放下一个东西的位置恰好是取东西的那个人正准备取下一个东西的位置,也就是放东西的人已放满一圈了)
3.队列空:计数Read == Write,说明队列空
typedef struct //数据内容根据实际可以随意变更
{
int a;
int b;
int c;
char str[100];
}DataDef
#define BUFFER_LEN 10 //环形队列长度
static int Read = 0; //读计数
static int Write = 0; //写计数
static DataDef DataBuff[BUFFER_LEN]; //环形队列
static int BufferFull(void) //环形队列满
{
return (Read == ((Write + 1) % BUFFER_LEN));
}
static int BufferEmpty(void) //环形队列空
{
return (Read == Write);
}
static void PutDataToBuffer(DataDef *data) //一组数据写入队列
{
if (!BufferFull())
{
DataBuff[Write] = *data;
Write = (Write + 1) % BUFFER_LEN;
}
}
static int GetDataFromBuffer(DataDef *data) //从队列读出一组数据
{
if (!BufferEmpty())
{
*data= DataBuff[Read];
Read = (Read + 1) % BUFFER_LEN;
return 1;
}
else
{
return 0;
}
}