【数据结构】循环队列的表示和实现

以你之姓@ 2021-11-26 10:54 471阅读 0赞
  1. #include<iostream>
  2. using namespace std;
  3. const int MAXSIZE = 10;
  4. typedef struct Queue {
  5. int data[MAXSIZE];
  6. int front;
  7. int rear;
  8. }Queue;
  9. void InitQueue(Queue &Q) {
  10. Q.rear = Q.front = 0;
  11. }
  12. bool QueueEmpty(Queue Q) {
  13. if (Q.rear == Q.front) {
  14. cout<<"Queue is empty"<<endl;
  15. return true;
  16. }
  17. return false;
  18. }
  19. bool QueueFull(Queue Q) {
  20. if ((Q.rear+1)%MAXSIZE == Q.front) {
  21. cout<<"Queue is full"<<endl;
  22. return true;
  23. }
  24. return false;
  25. }
  26. bool EnQueue(Queue &Q, int data) {
  27. if (QueueFull(Q)) {
  28. cout<<"Enqueue "<<data<<" fail"<<endl;
  29. return false;
  30. }
  31. Q.data[Q.rear] = data;
  32. Q.rear = (Q.rear+1)%MAXSIZE;
  33. return true;
  34. }
  35. bool DeQueue(Queue &Q, int &data) {
  36. if (QueueEmpty(Q))
  37. return false;
  38. data = Q.data[Q.front];
  39. Q.front = (Q.front+1)%MAXSIZE;
  40. return true;
  41. }
  42. void PrintQueue(Queue Q) {
  43. int ptr = Q.front;
  44. while (ptr != Q.rear) {
  45. cout<<Q.data[ptr]<<" ";
  46. ptr = (ptr+1)%MAXSIZE;
  47. }
  48. cout<<endl;
  49. }
  50. int main() {
  51. Queue Q;
  52. InitQueue(Q);
  53. cout<<"Enqueue 10 elements"<<endl;
  54. for (int i=0; i<10; i++)
  55. EnQueue(Q, i), PrintQueue(Q);
  56. cout<<endl<<"Dequeue 5 elements"<<endl;
  57. for (int i=0, e; i<5; i++) {
  58. DeQueue(Q, e);
  59. cout<<"After dequeue "<<e<<endl;
  60. PrintQueue(Q);
  61. }
  62. cout<<endl<<"Enqueue 2 elements"<<endl;
  63. for (int i=0; i<2; i++)
  64. EnQueue(Q, i), PrintQueue(Q);
  65. return 0;
  66. }
  67. // 测试结果
  68. Enqueue 10 elements
  69. 0
  70. 0 1
  71. 0 1 2
  72. 0 1 2 3
  73. 0 1 2 3 4
  74. 0 1 2 3 4 5
  75. 0 1 2 3 4 5 6
  76. 0 1 2 3 4 5 6 7
  77. 0 1 2 3 4 5 6 7 8
  78. Queue is full
  79. Enqueue 9 fail
  80. 0 1 2 3 4 5 6 7 8
  81. Dequeue 5 elements
  82. After dequeue 0
  83. 1 2 3 4 5 6 7 8
  84. After dequeue 1
  85. 2 3 4 5 6 7 8
  86. After dequeue 2
  87. 3 4 5 6 7 8
  88. After dequeue 3
  89. 4 5 6 7 8
  90. After dequeue 4
  91. 5 6 7 8
  92. Enqueue 2 elements
  93. 5 6 7 8 0
  94. 5 6 7 8 0 1

发表评论

表情:
评论列表 (有 0 条评论,471人围观)

还没有评论,来说两句吧...

相关阅读