当前位置:   article > 正文

C++实现循环队列_c++循环列表

c++循环列表

c++实现循环队列中的基本操作:

1、循环队列的初始化
2、循环队列的入队
3、循环队列的出队
4、循环队列的取值
5、循环队列的求长
6、循环队列的判空
7、循环队列的清空
8、循环队列的销毁
9、循环队列的打印

有了用C++实现顺序表和顺序栈的基础后,编写循环队列的代码就会容易很多,相应的链接如下:
C++实现顺序表_平头哥melo的博客-CSDN博客
C++实现顺序栈_平头哥melo的博客-CSDN博客

 代码实现:

  1. //Date:2021/11/16
  2. #include <iostream>
  3. using namespace std;
  4. #define Maxsize 100
  5. #define QElemType int//QElemType类型可根据实际情况自行设定
  6. //*****************************队列的顺序存储结构******************************
  7. typedef struct
  8. {
  9. QElemType* base;
  10. int front;
  11. int rear;
  12. }SqQueue;
  13. //***************************循环队列的基本操作函数****************************
  14. //循环队列的初始化
  15. int InitQueue(SqQueue& Q)
  16. {
  17. //构造一个空队列Q
  18. Q.base = new QElemType[Maxsize];//为队列分配一个最大容量为Maxsize的数组空间
  19. if (!Q.base)
  20. exit(OVERFLOW);//存储分配失败
  21. Q.front = Q.rear = 0;//头指针和尾指针置为零,队列为空
  22. return 0;
  23. }
  24. //循环队列的入队
  25. bool EnQueue(SqQueue& Q, QElemType e)
  26. {
  27. //插入一个元素e为Q的新的队尾元素
  28. if ((Q.rear + 1) % Maxsize == Q.front)
  29. return false;//队满
  30. Q.base[Q.rear] = e;//新元素插入队尾
  31. Q.rear = (Q.rear + 1) % Maxsize;//队尾指针加1
  32. return true;
  33. }
  34. //循环队列的出队
  35. bool DeQueue(SqQueue& Q, QElemType& e)
  36. {
  37. //删除Q的队头元素,用e返回其值
  38. if (Q.front == Q.rear)
  39. return false;//队空
  40. e = Q.base[Q.front];//保存队头元素
  41. Q.front = (Q.front + 1) % Maxsize;//队头指针加1
  42. return true;
  43. }
  44. //取循环队列的队头元素
  45. bool GetHead(SqQueue Q, QElemType& e)
  46. {
  47. //返回Q的队头元素,不修改队头指针
  48. if (Q.front == Q.rear)
  49. return false;//队列为空,取元素失败
  50. e = Q.base[Q.front];
  51. return true;
  52. }
  53. //***************************循环队列的基本功能函数****************************
  54. //1、入队
  55. void EnQueue(SqQueue& Q)
  56. {
  57. QElemType e;
  58. int flag;
  59. cout << "请输入入队元素:" << endl;
  60. cin >> e;
  61. flag = EnQueue(Q, e);
  62. if (flag)
  63. cout << "入队成功!" << endl;
  64. else
  65. cout << "入队失败!" << endl;
  66. }
  67. //2、出队
  68. void DeQueue(SqQueue& Q)
  69. {
  70. QElemType e;
  71. int flag;
  72. flag = DeQueue(Q, e);
  73. if (flag)
  74. cout << "出队元素为:" << e << endl;
  75. else
  76. cout << "出队失败!" << endl;
  77. }
  78. //3、取值
  79. void GetHead(SqQueue Q)
  80. {
  81. QElemType e;
  82. int flag;
  83. flag=GetHead(Q,e);
  84. if (flag)
  85. cout << "取得的队头元素为:" << e << endl;
  86. else
  87. cout << "取值失败!" << endl;
  88. }
  89. //4、求长
  90. void QueueLength(SqQueue Q)
  91. {
  92. //返回Q的元素个数,即队列的长度
  93. int n = (Q.rear - Q.front + Maxsize) % Maxsize;
  94. cout << "队列长度为:" << n << endl;
  95. }
  96. //5、判空
  97. void QueueEmpty(SqQueue Q)
  98. {
  99. if (Q.front == Q.rear)
  100. cout << "队列为空!" << endl;
  101. else
  102. cout << "队列不为空!" << endl;
  103. }
  104. //6、清空
  105. void ClearQueue(SqQueue& Q)
  106. {
  107. Q.rear = Q.front = 0;
  108. }
  109. //7、销毁
  110. void DestoryQueue(SqQueue& Q)
  111. {
  112. if (Q.base)
  113. {
  114. delete[]Q.base;
  115. Q.base = NULL;
  116. Q.rear = Q.front = 0;
  117. }
  118. }
  119. //8、打印
  120. void PrintQueue(SqQueue Q)
  121. {
  122. QElemType* p = Q.base;
  123. int n = (Q.rear - Q.front + Maxsize) % Maxsize;
  124. for (int i = 1; i <= n; i++)
  125. cout << "第" << i << "个元素为:" << *p++ << endl;
  126. }
  127. //菜单
  128. void menu()
  129. {
  130. cout << "***************************************************************************" << endl;
  131. cout << "***********************************1、入队*********************************" << endl;
  132. cout << "***********************************2、出队*********************************" << endl;
  133. cout << "***********************************3、取值*********************************" << endl;
  134. cout << "***********************************4、求长*********************************" << endl;
  135. cout << "***********************************5、判空*********************************" << endl;
  136. cout << "***********************************6、清空*********************************" << endl;
  137. cout << "***********************************7、销毁*********************************" << endl;
  138. cout << "***********************************8、打印*********************************" << endl;
  139. cout << "***********************************0、退出*********************************" << endl;
  140. cout << "***************************************************************************" << endl;
  141. }
  142. int main()
  143. {
  144. SqQueue Q;
  145. int select;
  146. InitQueue(Q);
  147. while (1)
  148. {
  149. system("CLS");//清屏操作
  150. menu();
  151. cout << "请输入菜单序号:" << endl;
  152. cin >> select;
  153. switch (select)
  154. {
  155. case 1://入队
  156. EnQueue(Q);
  157. system("pause");//按任意键继续
  158. break;
  159. case 2://出队
  160. DeQueue(Q);
  161. system("pause");
  162. break;
  163. case 3://取队头元素
  164. GetHead(Q);
  165. system("pause");
  166. break;
  167. case 4://求队列长度
  168. QueueLength(Q);
  169. system("pause");
  170. break;
  171. case 5://判断队列是否为空
  172. QueueEmpty(Q);
  173. system("pause");
  174. break;
  175. case 6://清空队列
  176. ClearQueue(Q);
  177. system("pause");
  178. break;
  179. case 7://销毁队列,销毁后会自动退出
  180. DestoryQueue(Q);
  181. system("pause");
  182. return 0;
  183. break;
  184. case 8://从队头到队尾遍历栈并打印
  185. PrintQueue(Q);
  186. system("pause");
  187. break;
  188. case 0:
  189. cout << "欢迎下次使用!" << endl;//退出
  190. system("pause");
  191. return 0;
  192. break;
  193. default:
  194. cout << "菜单序号输入有误!" << endl;
  195. system("pause");
  196. break;
  197. }
  198. }
  199. system("pause");
  200. return 0;
  201. }

参考资料:《数据结构》(C语言版)严蔚敏

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

闽ICP备14008679号