当前位置:   article > 正文

循环顺序队列_c语言请设计void clearqueue(seqqueue *q)函数。 该函数清除循环顺序队列q

c语言请设计void clearqueue(seqqueue *q)函数。 该函数清除循环顺序队列q的数据(
  1. #include<iostream>
  2. using namespace std;
  3. const int MAXQSIZE = 5;
  4. //队列类
  5. template<class T>
  6. struct LinkList
  7. {
  8. T * data;//指向连续的数据存储区域
  9. int front;//头指针 指向第一个元素
  10. int rear;//尾指针 如果队列不为空指向最后元素的下一个位置
  11. };
  12. //构造一个空队列
  13. template<class T>
  14. void InitQueue(LinkList<T> & que)
  15. {
  16. que.data = (T *)malloc(MAXQSIZE*sizeof(T));
  17. if(!que.data) exit(0);
  18. que.front = que.rear= 0;
  19. }
  20. //销毁队列
  21. template<class T>
  22. void DestroyQueue(LinkList<T>& que)
  23. {
  24. free(que.data);
  25. }
  26. //清空队列
  27. template<class T>
  28. void ClearQueue(LinkList<T>& que)
  29. {
  30. que.front = que.front= 0;
  31. }
  32. //返回队列的长度
  33. template<class T>
  34. int QueueLength(LinkList<T>& que)
  35. {
  36. return (que.rear - que.front + MAXQSIZE)%MAXQSIZE;
  37. }
  38. //返回队列的队首元素
  39. template<class T>
  40. T GetHead(LinkList<T>& que)
  41. {
  42. if(que.front==que.rear)
  43. throw runtime_error("");
  44. return que.data[que.front];
  45. }
  46. //元素入队
  47. template<class T>
  48. bool EnQueue(LinkList<T>& que,T t)
  49. {
  50. if((que.rear+1)%MAXQSIZE == que.front)
  51. {
  52. return false;
  53. }
  54. que.data[que.rear] = t;
  55. que.rear = (que.rear+1)%MAXQSIZE;
  56. return true;
  57. }
  58. //元素出队
  59. template<class T>
  60. bool DeQueue(LinkList<T>& que,T & t)
  61. {
  62. if(que.front==que.rear)
  63. return false;
  64. t = que.data[que.front];
  65. que.front = (que.front + 1)%MAXQSIZE;
  66. return true;
  67. }
  68. //从对头到队尾元素遍历调用visit函数
  69. template<class T>
  70. void VisitQueue(LinkList<T>& que,void (*visit)(T &t))
  71. {
  72. int p = que.front;
  73. while (p!=que.rear)
  74. {
  75. (*visit)(que.data[p]);
  76. p = (p+1)%MAXQSIZE;
  77. }
  78. }
  79. //测试函数
  80. template<class T>
  81. void Print(T &t)
  82. {
  83. cout<<t<<endl;
  84. }
  85. template<class T>
  86. void AddOne(T &t)
  87. {
  88. t++;
  89. }
  90. int main()
  91. {
  92. //创建一个空的队列
  93. LinkList<int> queue;
  94. //初始化队列
  95. InitQueue(queue);
  96. //元素入队
  97. EnQueue(queue,1);
  98. EnQueue(queue,2);
  99. EnQueue(queue,3);
  100. EnQueue(queue,4);
  101. //返回队列的长度
  102. cout<<"队列的长度: "<<QueueLength(queue)<<endl;
  103. //输出所有元素
  104. VisitQueue(queue,Print<int>);
  105. //返回队列的队首元素
  106. cout<<"队列的队首元素: "<<GetHead(queue)<<endl;
  107. //元素出队
  108. int a ;
  109. if(DeQueue(queue,a))
  110. {
  111. cout<<"出队元素: "<<a<<endl;
  112. }
  113. //返回队列的长度
  114. cout<<"队列的长度: "<<QueueLength(queue)<<endl;
  115. //输出所有元素
  116. VisitQueue(queue,Print<int>);
  117. //元素出队
  118. if(DeQueue(queue,a))
  119. {
  120. cout<<"出队元素: "<<a<<endl;
  121. }
  122. //返回队列的长度
  123. cout<<"队列的长度: "<<QueueLength(queue)<<endl;
  124. //输出所有元素
  125. VisitQueue(queue,Print<int>);
  126. //元素入队
  127. EnQueue(queue,5);
  128. EnQueue(queue,6);
  129. cout<<"5、6元素入队"<<endl;
  130. //返回队列的长度
  131. cout<<"队列的长度: "<<QueueLength(queue)<<endl;
  132. //输出所有元素
  133. VisitQueue(queue,Print<int>);
  134. //将所有元素加一
  135. cout<<"将所有元素加一"<<endl;
  136. VisitQueue(queue,AddOne<int>);
  137. //输出所有元素
  138. VisitQueue(queue,Print<int>);
  139. //清空队列
  140. ClearQueue(queue);
  141. //销毁队列
  142. DestroyQueue(queue);
  143. }

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

闽ICP备14008679号