当前位置:   article > 正文

C++实现链队_c++链队列(有头结点)的初始化、入队、出队、取队头元素操作。

c++链队列(有头结点)的初始化、入队、出队、取队头元素操作。

C++实现链队中的基本操作:

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

注意:在链队的出队操作中,要用if语句来判断出队元素是否为最后一个元素。若是,则将队尾指针重新赋值,指向头结点,否则尾指针会被delete。

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

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

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

闽ICP备14008679号