当前位置:   article > 正文

队列的操作实现_根据命令实现队列的操作

根据命令实现队列的操作

队列,先进先出(FIFO)
          只允许在一端(队尾)进行插入操作(入队列),在另一端(对头)进行删除操作(出队列)
顺序队列操作实现:
        用单链表实现
  1. #pragma once
  2. #include<stdio.h>
  3. #include<assert.h>
  4. #include<windows.h>
  5. typedef int QDataType;
  6. typedef struct QNode{
  7. QDataType data;
  8. struct QNode *pNext;
  9. }QNode;
  10. typedef struct Queue{
  11. QNode *pFront;//队列头
  12. QNode *pRear;//队列尾
  13. int size;
  14. }Queue;
  15. //初始化
  16. void QueueInit(Queue *pQ);
  17. //入队
  18. void QueuePush(Queue *pQ, QDataType data);
  19. //出队
  20. void QueuePop(Queue *pQ);
  21. //返回队首元素
  22. QDataType QueueFront(Queue *pQ);
  23. //判断队列是否为空
  24. int QueueIsEmpty(Queue *pQ);
  25. //返回队列元素个数
  26. int QueueSize(Queue *pQ);
  27. //销毁
  28. void QueueDestroy(Queue *pQ);
  1. #include "Queue.h"
  2. //初始化
  3. void QueueInit(Queue *pQ)
  4. {
  5. assert(pQ);
  6. pQ->pFront = pQ->pRear = NULL;
  7. pQ->size = 0;
  8. }
  9. //入队
  10. void QueuePush(Queue *pQ, QDataType data)
  11. {
  12. assert(pQ);
  13. pQ->size++;
  14. QNode *pNewNode = (QNode *)malloc(sizeof(QNode));
  15. assert(pNewNode);
  16. pNewNode->data = data;
  17. pNewNode->pNext = NULL;
  18. if (pQ->pRear == NULL){//空队列
  19. pQ->pFront = pQ->pRear = pNewNode;
  20. return;
  21. }
  22. //有元素队列
  23. pQ->pRear->pNext = pNewNode;
  24. pQ->pRear = pNewNode;
  25. }
  26. //出队
  27. void QueuePop(Queue *pQ)
  28. {
  29. assert(pQ);
  30. assert(pQ->size > 0);
  31. pQ->size--;
  32. //从对头出
  33. QNode *pOldFront = pQ->pFront;
  34. pQ->pFront = pQ->pFront->pNext;
  35. free(pOldFront);
  36. //只有一个元素的队列
  37. if (pQ->pFront == NULL){
  38. pQ->pRear = NULL;
  39. }
  40. }
  41. //返回队首元素
  42. QDataType QueueFront(Queue *pQ)
  43. {
  44. assert(pQ);
  45. assert(pQ->size > 0);
  46. return pQ->pFront->data;
  47. }
  48. //判断队列是否为空:1,空;0,不空
  49. int QueueIsEmpty(Queue *pQ)
  50. {
  51. return pQ->size == 0 ? 1 : 0;
  52. }
  53. //返回队列元素个数
  54. int QueueSize(Queue *pQ)
  55. {
  56. return pQ->size;
  57. }
  58. void QueueDestroy(Queue *pQ)
  59. {
  60. assert(pQ);
  61. QNode *queuePre = NULL;
  62. while (pQ->pFront){
  63. queuePre = pQ->pFront;
  64. pQ->pFront = pQ->pFront->pNext;
  65. free(queuePre);
  66. queuePre = NULL;
  67. }
  68. pQ->pRear = NULL;
  69. }
  70. void Queueprint(Queue *pQ)
  71. {
  72. assert(pQ);
  73. QNode *queue = pQ->pFront;
  74. while (queue){
  75. printf("%d->", queue->data);
  76. queue = queue->pNext;
  77. }
  78. printf("NULL\n");
  79. }
  80. int main()
  81. {
  82. Queue queue;
  83. QueueInit(&queue);
  84. QueuePush(&queue, 1);
  85. QueuePush(&queue, 2);
  86. QueuePush(&queue, 3);
  87. QueuePush(&queue, 4);
  88. QueuePush(&queue, 5);
  89. QueuePush(&queue, 6);
  90. Queueprint(&queue);
  91. QueuePop(&queue);
  92. Queueprint(&queue);
  93. QueuePop(&queue);
  94. Queueprint(&queue);
  95. printf("%d\n",QueueFront(&queue));
  96. QueueDestroy(&queue);
  97. Queueprint(&queue);
  98. system("pause");
  99. return 0;
  100. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/660818
推荐阅读
相关标签
  

闽ICP备14008679号