队列操作

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;

}

外部的应用只需要调用初始化,入队和出队三个操作就可以了

你可能感兴趣的:(队列操作)