当前位置:   article > 正文

C语言队列_initializequeue

initializequeue

 队列为先进先出。实例:手机应用商店应用更新队列,但这个可以强制调换队列顺序。

代码注释已经很详细了,不在解释。

Queue.h

  1. #ifndef _QUEUE_H_
  2. #define _QUEUE_H_
  3. #include <stdbool.h>
  4. typedef int Item;
  5. #define MAXQUEUE 10
  6. typedef struct node
  7. {
  8. Item item;
  9. struct node* next;
  10. }Node;
  11. typedef struct queue
  12. {
  13. Node* front; //记录头部
  14. Node* rear; //记录尾部
  15. int items; //记录项数
  16. }Queue;
  17. //队列初始化为空
  18. void InitializeQueue(Queue* pq);
  19. //检查队列是否以满
  20. bool QueueIsFull(const Queue* pq);
  21. //检查队列是否为空
  22. bool QueueIsEmtpy(const Queue* pq);
  23. //确定队列中的项数
  24. int QueueItemCount(const Queue* pq);
  25. //在队列末尾添加项
  26. bool EnQueue(Item item, Queue* pq);
  27. //从队列的开头删除项
  28. bool DeQueue(Item* pitem, Queue* pq);
  29. //清空队列
  30. void EmptyTheQueue(Queue* pq);
  31. #endif

Queue.cpp

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "queue.h"
  4. static void CopyToNode(Item item, Node* pn);
  5. static void CopyToItem(Node* pn, Item* pi);
  6. void InitializeQueue(Queue* pq) //初始化
  7. {
  8. pq->front = NULL;
  9. pq->rear = NULL;
  10. pq->items = 0;
  11. }
  12. bool QueueIsFull(const Queue* pq) //判断是否已满 10
  13. {
  14. return pq->items == MAXQUEUE;
  15. }
  16. bool QueueIsEmtpy(const Queue* pq) //检查队列是否为空
  17. {
  18. return pq->items == 0;
  19. }
  20. int QueueItemCount(const Queue* pq) //确定队列中的项数
  21. {
  22. return pq->items;
  23. }
  24. bool EnQueue(Item item, Queue* pq) //在末尾添加项 item=1;
  25. {
  26. Node* pnew = {};
  27. if (QueueIsFull(pq))
  28. return false;
  29. pnew = (Node*)malloc(sizeof(Node));
  30. if (pnew == NULL)
  31. {
  32. fprintf(stderr, "Unable to allocate memory!\n");
  33. exit(1);
  34. }
  35. CopyToNode(item, pnew);
  36. pnew->next == NULL;
  37. if (QueueIsEmtpy(pq))
  38. {
  39. pq->front = pnew;
  40. }
  41. else
  42. {
  43. pq->rear->next = pnew;
  44. }
  45. pq->rear = pnew;
  46. pq->items++;
  47. return true;
  48. }
  49. bool DeQueue(Item* pitem, Queue* pq) //从队列开头删除项
  50. {
  51. Node* pt = {};
  52. if (QueueIsEmtpy(pq))
  53. return false;
  54. CopyToItem(pq->front, pitem);
  55. pt = pq->front;
  56. pq->front = pq->front->next;
  57. free(pt);
  58. pq->items--;
  59. if (pq->items == 0)
  60. pq->rear = NULL;
  61. return true;
  62. }
  63. void EmptyTheQueue(Queue* pq) //清空队列
  64. {
  65. Item dummy;
  66. while (!QueueIsEmtpy(pq))
  67. DeQueue(&dummy, pq);
  68. }
  69. void CopyToNode(Item item, Node* pn) //拷贝到节点
  70. {
  71. pn->item = item;
  72. }
  73. void CopyToItem(Node* pn, Item* pi) //拷贝到项目
  74. {
  75. *pi = pn->item;
  76. }

UseQueue.cpp

  1. #include <stdio.h>
  2. #include "queue.h"
  3. int main(void)
  4. {
  5. char ch;
  6. Item temp;
  7. Queue line;
  8. InitializeQueue(&line);
  9. puts("Testing the Queue interface. Type a to add a value,");
  10. puts("type d to delete a value, and type q to quit.");
  11. while ((ch = getchar()) != 'q')
  12. {
  13. if (ch != 'a' && ch != 'd')
  14. {
  15. printf("incorrect input\n");
  16. continue;
  17. }
  18. if (ch == 'a')
  19. {
  20. printf("Integer to add: ");
  21. scanf_s("%d", &temp);
  22. if (!QueueIsFull(&line))
  23. {
  24. printf("Putting %d into queue\n", temp);
  25. EnQueue(temp, &line);
  26. }
  27. else
  28. puts("Queue is full!");
  29. }
  30. else
  31. {
  32. if (QueueIsEmtpy(&line))
  33. puts("Noting to delete!");
  34. else
  35. {
  36. DeQueue(&temp, &line);
  37. printf("Removing %d from queue\n", temp);
  38. }
  39. }
  40. printf("%d items in queue\n", QueueItemCount(&line));
  41. puts("Type a to add, d to delete, q to quit:");
  42. }
  43. EmptyTheQueue(&line);
  44. puts("bye!");
  45. return 0;
  46. }

运行结果

 Success is going from failure to failure without losing enthusiasm.

成功是从一次失败走向另一次失败,却不失热情。

 

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

闽ICP备14008679号