当前位置:   article > 正文

循环队列的应用_编程要求 本关的编程任务是补全右侧代码片段isempty、enqueue和dequeue中begin

编程要求 本关的编程任务是补全右侧代码片段isempty、enqueue和dequeue中begin至e

为了完成本关任务,你需要掌握:1.循环队列定义,2.入队、出队的定义,3.队空、队满的情况。

循环队列定义

循环队列将数组存储区看成是一个首尾相接的环形区域(下图)。当数据存放到尾地址后,下一个地址就跳转到首地址。循环队列定义如下:

 
  1. struct Queue{
  2. int maxSize; // 队列最大长度
  3. int *data; // 数据指针
  4. int front; // 头指针索引
  5. int rear; // 尾指针索引
  6. };

入队出队定义

入队操作:队列未满,在队尾插入一个元素item,使得data[rear+1]=item,若超过存储空间则尾指针索引取模(rear+1)%maxSize

出队操作:队列不空,返回队首元素值data[front],并移除队首元素front+1,若超过存储空间则头指针索引取模(front+1)%maxSize

队空队满情况

初始化创建空队时,令front=rear=0, 其中front指向队首元素,rear指向队尾元素的下一个元素:

  • 当队空时:front==rear
  • 当队满时:front==rear 亦成立

因此只凭等式front==rear无法判断队空还是队满。 一个方法是少用一个元素空间,约定:队列头指针front在队尾指针rear的下一个位置上作为队列“满”状态的标志(如上图),即:

  • 队空时: front==rear
  • 队满时: (rear+1)%maxSize==front
编程要求

本关的编程任务是补全右侧代码片段isFullisEmptyenQueuedeQueueBeginEnd中间的代码,具体要求如下:

  • isFull中,判断队列是否为满,若满返回true并在一行打印The queue is Full,否则返回false
  • isEmpty中,判断队列是否为空,若空返回true并在一行打印The queue is Empty,否则返回false
  • enQueue中,实现入队操作:将元素item加入队列尾部;
  • deQueue中,实现出队操作:移除队列首部元素,并返回元素值。
测试说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是平台的测试样例:

测试输入: 10 7 enqueue 30 enqueue 98 dequeue enqueue 96 dequeue dequeue enqueue 0 预期输出: 0 The queue is Empty

输入说明: 第一行n m分别表示循环队列大小、入队出队操作记录数量。 接下来m行,enqueue表示入队操作,后面接待入队元素;dequeue表示出队操作。

输出说明: 输出m个操作之后的所有队列元素。

  1. #include "queue_.h"
  2. using namespace std;
  3. void creatQueue(Queue* que, int maxSize)
  4. // 创建一个循环队列指针que,队列最大长度为maxSize
  5. {
  6. que->maxSize = maxSize;
  7. que->data = (int*)malloc(maxSize * sizeof(int));
  8. que->front = que->rear = 0;
  9. }
  10. void destroyQueue(Queue* que)
  11. // 释放队列内存空间
  12. {
  13. free(que->data);
  14. }
  15. bool isFull(Queue* que)
  16. // 判断队列que是否为满
  17. // 若满返回 true 并在一行打印 The queue is Full 末尾换行!!!
  18. // 否则返回 false
  19. {
  20. // 请在这里补充代码,完成本关任务
  21. /********** Begin *********/
  22. if((que->rear+1)%que->maxSize==que->front)
  23. {
  24. cout<<"The queue is Full"<<endl;
  25. return true;
  26. }
  27. else
  28. return false;
  29. /********** End **********/
  30. }
  31. bool isEmpty(Queue* que)
  32. // 判断队列que是否为空
  33. // 若空返回 true 并在一行打印 The queue is Empty 末尾换行!!!
  34. // 否则返回 false
  35. {
  36. // 请在这里补充代码,完成本关任务
  37. /********** Begin *********/
  38. if(que->front==que->rear)
  39. {
  40. cout<<"The queue is Empty"<<endl;
  41. return true;
  42. }
  43. else
  44. return false;
  45. /********** End **********/
  46. }
  47. int enQueue(Queue* que, int item)
  48. // 实现入队操作:将元素item加入队列que尾部
  49. // 若队列没满,编写加入操作,返回 1
  50. // 若队列满了,不做任何操作,返回 -1
  51. {
  52. // 请在这里补充代码,完成本关任务
  53. /********** Begin *********/
  54. if(isFull(que)) return -1;
  55. que->data[que->rear]=item;
  56. que->rear=(que->rear+1)%que->maxSize;
  57. return 1;
  58. /********** End **********/
  59. }
  60. int deQueue(Queue* que)
  61. // 实现出队操作:移除队列que首部元素,并返回元素值
  62. {
  63. // 请在这里补充代码,完成本关任务
  64. /********** Begin *********/
  65. int item=que->data[que->front];
  66. que->front=(que->front+1)%que->maxSize;
  67. return item;
  68. /********** End **********/
  69. }
  70. void printQueue(Queue* que)
  71. // 打印队列
  72. {
  73. while (isEmpty(que)==false) {
  74. int item = deQueue(que);
  75. printf("%d ", item);
  76. }
  77. }

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

闽ICP备14008679号