1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include "queue.h"
- /// front ... rear 数据方向 ->
- /* 队列的顺序存储结构(循环队列) */
- /****************************************************
- * 函 数 名:InitQueue
- * 函数功能:初始化队列
- * 入口参数:无
- * 说 明:
- ****************************************************/
- void InitQueue(SqQueue *Q)
- { /* 构造一个空队列Q */
- Q->front = Q->rear = 0; /*空队列*/
- }
- /****************************************************
- * 函 数 名:IsQueueEmpty
- * 函数功能:查询队列是否为空
- * 入口参数:Q 队列
- * 说 明:空队列,返回TRUE;否则返回FALSE
- ****************************************************/
- INT8U IsQueueEmpty(const SqQueue *Q)
- { /* 若*/
- if (Q->front == Q->rear)
- return TRUE;
- else
- return FALSE;
- }
- /****************************************************
- * 函 数 名:QueueLength
- * 函数功能:初始化长度
- * 入口参数:Q 队列
- * 说 明:
- ****************************************************/
- INT16U QueueLength(SqQueue Q)
- { /* 返回Q的元素个数,即队列的长度 */
- return (Q.rear - Q.front + MAX_QSIZE) % MAX_QSIZE;
- }
- /****************************************************
- * 函 数 名:GetHead
- * 函数功能:获取对头数据
- * 入口参数:Q 队列
- * 说 明:
- ****************************************************/
- INT8U GetHead(SqQueue *Q, CanData_TypeDef *e)
- { /* 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR */
- if (Q->front == Q->rear) /* 队列空 */
- return ERROR;
- *e = Q->CanBuf[Q->front];
- Q->front = (Q->front + 1) % MAX_QSIZE;
- return SUCCESS;
- }
- /****************************************************
- * 函 数 名:InsertQueue
- * 函数功能:队列插入数据
- * 入口参数:Q 待插入队列 e 待插入数据
- * 说 明:
- ****************************************************/
- INT8U InsertQueue(SqQueue *Q, CanData_TypeDef e)
- { /* 插入元素e为Q的新的队尾元素 */
- if ((Q->rear + 1) % MAX_QSIZE == Q->front) /* 队列满 */
- return ERROR;
- Q->CanBuf[Q->rear] = e;
- Q->rear = (Q->rear + 1) % MAX_QSIZE;
- return SUCCESS;
- }
|