1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. typedef int QElemType;
  8.  
  9. typedef struct QNode {
  10. QElemType data;
  11. struct QNode *next;
  12. } QNode, *QueuePtr;
  13.  
  14. typedef struct {
  15. QueuePtr front;
  16. QueuePtr rear;
  17. } LinkQueue;
  18.  
  19. bool InitQueue(LinkQueue &Q);
  20.  
  21. bool DestoryQueue(LinkQueue &Q);
  22.  
  23. bool ClearQueue(LinkQueue &Q);
  24.  
  25. bool QueueEmpty(LinkQueue Q);
  26.  
  27. int QueueLength(LinkQueue Q);
  28.  
  29. int GetHead(LinkQueue Q);
  30.  
  31. bool EnQueue(LinkQueue &Q, QElemType e);
  32.  
  33. bool DeQueue(LinkQueue &Q, QElemType &e);
  34.  
  35. void QueueTraverse(LinkQueue Q);
  36.  
  37. //Q.front里面是没有数据的
  38. //Q.rear里面是有数据的
  39. int main() {
  40. LinkQueue s;
  41. InitQueue(s);
  42. EnQueue(s, 5);
  43. EnQueue(s, 6);
  44. EnQueue(s, 7);
  45. ClearQueue(s);
  46. EnQueue(s, 8);
  47. EnQueue(s, 100);
  48. cout << QueueLength(s) << endl;
  49. int a;
  50. DeQueue(s, a);
  51. cout << a << endl;
  52. if (QueueEmpty(s)) {
  53. cout << 'a' << endl;
  54. }
  55. cout << GetHead(s) << endl;
  56. }
  57.  
  58. void QueueTraverse(LinkQueue Q) {
  59. if (Q.front == Q.rear) {
  60. return;
  61. }
  62. QueuePtr tmp = Q.front->next;
  63. while (tmp != Q.rear) {
  64. printf("%d ", tmp->data);
  65. tmp = tmp->next;
  66. }
  67. printf("%d\n", tmp->data);
  68. }
  69.  
  70. int GetHead(LinkQueue Q) {
  71. return Q.front->next->data;
  72. }
  73.  
  74. bool QueueEmpty(LinkQueue Q) {
  75. if (Q.front == Q.rear) {
  76. return true;
  77. }
  78. return false;
  79. }
  80.  
  81. int QueueLength(LinkQueue Q) {
  82. int length = 0;
  83. LinkQueue tmp = Q;
  84. while (tmp.front) {
  85. length++;
  86. tmp.front = tmp.front->next;
  87. }
  88. return length - 1;
  89. }
  90.  
  91. bool InitQueue(LinkQueue &Q) {
  92. Q.front = Q.rear = (QNode *) malloc(sizeof(QNode));
  93. if (!Q.front) {
  94. exit(EOVERFLOW);
  95. }
  96. Q.front->next = NULL;
  97. return true;
  98. }
  99.  
  100. bool ClearQueue(LinkQueue &Q) {
  101. QueuePtr tmp = Q.front->next;
  102. while (tmp) {
  103. QueuePtr tp = tmp;
  104. tmp = tmp->next;
  105. free(tp);
  106. }
  107. Q.rear = Q.front;
  108. Q.front->next = NULL;
  109. }
  110.  
  111. bool DestoryQueue(LinkQueue &Q) {
  112. while (Q.front) {
  113. Q.rear = Q.front->next;
  114. free(Q.front);
  115. Q.front = Q.rear;
  116. }
  117. return true;
  118. }
  119.  
  120. bool EnQueue(LinkQueue &Q, QElemType e) {
  121. QueuePtr p = (QueuePtr) malloc(sizeof(QNode));
  122. if (!p) {
  123. exit(EOVERFLOW);
  124. }
  125. p->data = e;
  126. p->next = NULL;
  127. Q.rear->next = p;
  128. Q.rear = p;
  129. return true;
  130. }
  131.  
  132. bool DeQueue(LinkQueue &Q, QElemType &e) {
  133. if (Q.front == Q.rear) {
  134. return false;
  135. }
  136. QueuePtr p = Q.front->next;
  137. e = p->data;
  138. Q.front->next = p->next;
  139. if (Q.rear == p) {
  140. Q.rear = Q.front;
  141. }
  142. free(p);
  143. return true;
  144. }

数据结构C语言版-队列的更多相关文章

  1. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  2. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  3. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  4. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  5. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  6. 【数据结构(C语言版)系列三】 队列

    队列的定义 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾(rear),允许 ...

  7. 深入浅出数据结构C语言版(7)——特殊的表:队列与栈

    从深入浅出数据结构(4)到(6),我们分别讨论了什么是表.什么是链表.为什么用链表以及如何用数组模拟链表(游标数组),而现在,我们要进入到对线性表(特意加了"线性"二字是因为存在多 ...

  8. 【数据结构(C语言版)系列二】 栈

    栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...

  9. 深入浅出数据结构C语言版(5)——链表的操作

    上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...

随机推荐

  1. 1503.02531-Distilling the Knowledge in a Neural Network.md

    原来交叉熵还有一个tempature,这个tempature有如下的定义: \[ q_i=\frac{e^{z_i/T}}{\sum_j{e^{z_j/T}}} \] 其中T就是tempature,一 ...

  2. 《转》完美解决微信video视频隐藏控件和内联播放问题

    地址:https://blog.csdn.net/xiao190128/article/details/81025378 var u = navigator.userAgent; var isAndr ...

  3. excle 内部 超链接(锚点)

    超连接对象: 1.文档 2.本文档中的位置. 3.  本文重点  指定 链接到 xx表中的xx位置. 第三种连接  类似于 web文档的中 锚点 超连接 看下图 选 择本文档中的位置, 选择 工作表. ...

  4. Ubuntu16.04 藍牙連上,但是聲音裏面找不到設備

    解決辦法: 1. sudo apt-get install blueman bluez* 2. sudo vim /etc/pulse/default.pa 注釋掉下面的代碼: #.ifexists ...

  5. 机器学习--Lasso回归和岭回归

    之前我们介绍了多元线性回归的原理, 又通过一个案例对多元线性回归模型进一步了解, 其中谈到自变量之间存在高度相关, 容易产生多重共线性问题, 对于多重共线性问题的解决方法有: 删除自变量, 改变数据形 ...

  6. hive上传数据到oracle

    # Oracle 建立hive外部表 使用oracle的大数据连接器向建立hive的外部表,在通过在oracle中根据外部表建立内部表(create table as select * from ex ...

  7. MR汇聚工具步骤

    ---------------------------------MR汇聚工具步骤------------------------------------- 1.需要连上141服务器 用户:root ...

  8. hive上传下载数据

    ------------------------------------------read me--方式1:适用于工具传输--方式2:适用于手动临时性传输---------------------- ...

  9. 分布式事务Hmily TCC源码--学习整合

    一.什么是分布式事务 分布式事务是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点上, 本质上来说,分布式事务是为了保证不同数据库的数据一致性 TCC事务主 ...

  10. Workerman创建聊天室实例

    // 标记是全局启动 define('GLOBAL_START', 1); require_once __DIR__ . '/Workerman/Connection.php'; require_on ...