queue.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "queue.h"
  2. /// front ... rear 数据方向 ->
  3. /* 队列的顺序存储结构(循环队列) */
  4. /****************************************************
  5. * 函 数 名:InitQueue
  6. * 函数功能:初始化队列
  7. * 入口参数:无
  8. * 说 明:
  9. ****************************************************/
  10. void InitQueue(SqQueue *Q)
  11. { /* 构造一个空队列Q */
  12. Q->front = Q->rear = 0; /*空队列*/
  13. }
  14. /****************************************************
  15. * 函 数 名:IsQueueEmpty
  16. * 函数功能:查询队列是否为空
  17. * 入口参数:Q 队列
  18. * 说 明:空队列,返回TRUE;否则返回FALSE
  19. ****************************************************/
  20. INT8U IsQueueEmpty(const SqQueue *Q)
  21. { /* 若*/
  22. if (Q->front == Q->rear)
  23. return TRUE;
  24. else
  25. return FALSE;
  26. }
  27. /****************************************************
  28. * 函 数 名:QueueLength
  29. * 函数功能:初始化长度
  30. * 入口参数:Q 队列
  31. * 说 明:
  32. ****************************************************/
  33. INT16U QueueLength(SqQueue Q)
  34. { /* 返回Q的元素个数,即队列的长度 */
  35. return (Q.rear - Q.front + MAX_QSIZE) % MAX_QSIZE;
  36. }
  37. /****************************************************
  38. * 函 数 名:GetHead
  39. * 函数功能:获取对头数据
  40. * 入口参数:Q 队列
  41. * 说 明:
  42. ****************************************************/
  43. INT8U GetHead(SqQueue *Q, CanData_TypeDef *e)
  44. { /* 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR */
  45. if (Q->front == Q->rear) /* 队列空 */
  46. return ERROR;
  47. *e = Q->CanBuf[Q->front];
  48. Q->front = (Q->front + 1) % MAX_QSIZE;
  49. return SUCCESS;
  50. }
  51. /****************************************************
  52. * 函 数 名:InsertQueue
  53. * 函数功能:队列插入数据
  54. * 入口参数:Q 待插入队列 e 待插入数据
  55. * 说 明:
  56. ****************************************************/
  57. INT8U InsertQueue(SqQueue *Q, CanData_TypeDef e)
  58. { /* 插入元素e为Q的新的队尾元素 */
  59. if ((Q->rear + 1) % MAX_QSIZE == Q->front) /* 队列满 */
  60. return ERROR;
  61. Q->CanBuf[Q->rear] = e;
  62. Q->rear = (Q->rear + 1) % MAX_QSIZE;
  63. return SUCCESS;
  64. }