typedef struct
{
uint32 Data[MAX]; //存储数据的数组
uint8 Front; //队列的头
uint8 Rear; //队列的尾
}QueueType; //队列的数据结构
//初始化一个队列
void QueueInit(void)
{
uint8 Count;
Queue.Front = 0; //将头和尾都设为0
Queue.Rear = 0;
for (Count = 0; Count < MAX; Count++)
{
Queue.Data[Count] = 0;
}
return;
}
//在进行入队和出队操作的时候,用这个函数来调整头和尾
uint8 QueueNext(uint8 Index)
{
return(((Index) + 1) % MAX);
}
//判断队列是否为空
uint8 QueueIsEmpty(QueueType Queue)
{
uint32 Ret;
if ((Queue).Front == (Queue).Rear) { //当头和尾指向一致的时候,说明是空队列
Ret = 1;
}
else {
Ret = 0;
}
return Ret;
}
//判断队列是否满了
uint8 QueueIsFull(QueueType Queue)
{
uint32 Ret;
if((Queue).Front == QueueNext((Queue).Rear)) { //当尾后移一位和头重合,表示满了
Ret = 1;
}
else {
Ret = 0;
}
return Ret;
}
//入队操作
void QueueEnqueue(uint8 * DataPtr)
{
if (0 == QueueIsFull(Queue)) //如果队列没满的话,进行如下操作
{
Queue.Data[Queue.Rear] = *DataPtr; //将数据放到队列尾
Queue.Rear = QueueNext(Queue.Rear);//将队列尾后移动一位
}
}
//出队列操作
uint8 QueueDequeue(uint8 * DataPtr)
{
uint8 Ret;
if (0 == QueueIsEmpty(Queue)) //队列不为空的情况下进行出队操作
{
*DataPtr = Queue.Data[Queue.Front]; //将头的数据取出来
Queue.Front = QueueNext(Queue.Front); //将头向后移一位
Ret = 0;
}
else
{
Ret = 1;
}
return Ret;
}
外部的应用只需要调用初始化,入队和出队三个操作就可以了