当前位置:   article > 正文

c语言一个队列实现_建立一个空队列,对队列进行插入删除取对头元素等操作c语言

建立一个空队列,对队列进行插入删除取对头元素等操作c语言

队列是c语言中一个重要的数据结构之一,下面就是实现队列建立、插入、删除、清空、销毁等操作的代码。

头文件 Queue.h

  1. #ifndef QUEUE_H_
  2. #define QUEUE_H_
  3. typedef int Item;
  4. typedef struct node
  5. {
  6. Item data;
  7. struct node* next;
  8. }Node,*PNode;
  9. typedef struct
  10. {
  11. PNode front;
  12. PNode rear;
  13. int size;
  14. }Queue;
  15. /*构造一个空队列*/
  16. Queue* InitQueue();
  17. /*销毁一个队列*/
  18. void DestroyQueue(Queue* pqueue);
  19. /*清空一个队列*/
  20. void ClearQueue(Queue* pqueue);
  21. /*判断一个队列是否为空*/
  22. int IsEmpty(Queue* pqueue);
  23. /*返回队列大小*/
  24. int GetSize(Queue* pqueue);
  25. /*返回对头元素*/
  26. PNode GetFront(Queue* pqueue,Item *pitem);
  27. /*返回队尾元素*/
  28. PNode GetRear(Queue* pqueue,Item *pitem);
  29. /*将新元素入队*/
  30. PNode EnQueue(Queue* pqueue,Item item);
  31. /*将队头元素出队*/
  32. PNode DelQueue(Queue* pqueue,Item *pitem);
  33. /*遍历队列,并对各项数据调用visit函数*/
  34. void QueueTraverse(Queue* pqueue,void (*visit)(PNode));
  35. #endif


Queue.c

  1. #include "Queue.h"
  2. #include <malloc.h>
  3. #include <stdio.h>
  4. /*构造一个空队列*/
  5. Queue* InitQueue()
  6. {
  7. Queue* pqueue = (Queue*)malloc(sizeof(Queue));
  8. if(pqueue!=NULL)
  9. {
  10. pqueue->front = NULL;
  11. pqueue->rear = NULL;
  12. pqueue->size = 0;
  13. }
  14. return pqueue;
  15. }
  16. /*销毁一个队列*/
  17. void DestroyQueue(Queue* pqueue)
  18. {
  19. if(IsEmpty(pqueue)!=1)
  20. ClearQueue(pqueue);
  21. free(pqueue);
  22. }
  23. /*清空一个队列*/
  24. void ClearQueue(Queue* pqueue)
  25. {
  26. while(IsEmpty(pqueue)!= 1)
  27. {
  28. DelQueue(pqueue,NULL);
  29. }
  30. }
  31. /*判断一个队列是否为空*/
  32. int IsEmpty(Queue* pqueue)
  33. {
  34. if(pqueue->front==NULL&&pqueue->rear==NULL&& pqueue->size ==0)
  35. return 1;
  36. else
  37. return 0;
  38. }
  39. /*返回一个队列的大小*/
  40. int GetSize(Queue* pqueue)
  41. {
  42. return pqueue->size;
  43. }
  44. /*返回队头元素*/
  45. PNode GetFront(Queue* pqueue,Item *pitem)
  46. {
  47. if(IsEmpty(pqueue)!=1&& pitem!=NULL)//队列不空
  48. *pitem = pqueue->front->data;
  49. return pqueue->front;
  50. }
  51. /*返回队尾元素*/
  52. PNode GetRear(Queue *pqueue,Item *pitem)
  53. {
  54. if(IsEmpty(pqueue)!=1&& pitem!=NULL)
  55. {
  56. *pitem = pqueue->rear->data;
  57. }
  58. return pqueue->rear;
  59. }
  60. /*将新元素入队列*/
  61. PNode EnQueue(Queue* pqueue,Item item)
  62. {
  63. PNode pnode = (PNode)malloc(sizeof(Node));
  64. if(pnode!=NULL)
  65. {
  66. pnode->data = item;
  67. pnode->next = NULL;
  68. if(IsEmpty(pqueue))
  69. {
  70. pqueue->front = pnode;
  71. }
  72. else
  73. {
  74. pqueue->rear->next = pnode;
  75. }
  76. pqueue->rear = pnode;
  77. pqueue->size++;
  78. }
  79. return pnode;
  80. }
  81. /*队头元素出队*/
  82. PNode DelQueue(Queue* pqueue, Item *pitem)
  83. {
  84. PNode pnode = pqueue->front;
  85. if(IsEmpty(pqueue)!=1&&pnode!=NULL)
  86. {
  87. if(pitem!=NULL)
  88. *pitem = pnode->data;
  89. pqueue->size--;
  90. pqueue->front = pnode->next;
  91. free(pnode);
  92. if(pqueue->size ==0)
  93. pqueue->rear =NULL;
  94. }
  95. return pqueue->front;
  96. }
  97. /*遍历队列*/
  98. void QueueTraverse(Queue* pqueue,void (*visit)(PNode))
  99. {
  100. PNode pnode = pqueue->front;
  101. int i = pqueue->size;
  102. while(i--)
  103. {
  104. visit(pnode);
  105. pnode = pnode->next;
  106. }
  107. }

测试程序test.c

  1. #include "Queue.h"
  2. #include <stdio.h>
  3. void visit(PNode pq)
  4. {
  5. printf("该节点的元素为: %d\n",pq->data);
  6. }
  7. int main()
  8. {
  9. Queue* pq = InitQueue();
  10. int i,item;
  11. printf("输入0-9共10个数字入队\n");
  12. for(i =0; i < 10; i++)
  13. {
  14. EnQueue(pq,i);
  15. GetRear(pq,&item);
  16. printf("%d ",item);
  17. }
  18. printf("\n");
  19. printf("遍历这个队列,并执行visit函数:\n");
  20. QueueTraverse(pq,&visit);
  21. printf("队列元素出队并依次输出如下: \n");
  22. for(i = 0; i < 10 ; i++)
  23. {
  24. DelQueue(pq,&item);
  25. printf("%d",item);
  26. }
  27. ClearQueue(pq);
  28. if(IsEmpty(pq))
  29. printf("成功将队列置为空\n");
  30. DestroyQueue(pq);
  31. printf("队列已被销毁\n");
  32. return 0;
  33. }


 

 

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

闽ICP备14008679号