1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef int QElemType;
  5.  
  6. typedef struct QNode{
  7. QElemType data;
  8. struct QNode *next;
  9. }QNode;
  10.  
  11. typedef struct{
  12. QNode *front;
  13. QNode *rear;
  14. }LinkQueue;
  15.  
  16. LinkQueue *InitQueue(LinkQueue *Q); //初始化
  17. LinkQueue *DestroyQueue(LinkQueue* Q);//销毁
  18. void ClearQueue(LinkQueue *Q);//清空
  19. int QueueEmpty(LinkQueue *Q);//判空
  20. int QueueLength(LinkQueue *Q);//队列长度
  21. QElemType GetHead(LinkQueue *Q);//获取队头元素
  22. int EnQueue(LinkQueue *Q, QElemType e);//插入新元素到队尾
  23. int DeQueue(LinkQueue *Q, QElemType *e);//删除队头元素
  24. void QueueTraverse(LinkQueue *Q);//遍历
  25.  
  26. //初始化
  27. LinkQueue *InitQueue(LinkQueue *Q){
  28. Q = (LinkQueue *)malloc(sizeof(LinkQueue));
  29. //共同指向头节点
  30. Q->front = Q->rear = (QNode *)malloc(sizeof(QNode));
  31. Q->front->next = NULL;
  32. printf("初始化成功\n");
  33. return Q;
  34. }
  35.  
  36. //销毁,返回一个空指针
  37. LinkQueue *DestroyQueue(LinkQueue* Q){
  38. QNode *p = Q->front->next;
  39. QNode *r = p->next;
  40. while(r){
  41. free(p);
  42. p = r;
  43. r = p->next;
  44. }
  45. free(Q->front);
  46. free(Q);
  47. printf("销毁成功\n");
  48. return NULL;
  49. }
  50.  
  51. //清空
  52. void ClearQueue(LinkQueue *Q){
  53. QNode *p = Q->front->next;
  54. while(p){
  55. p->data = ;
  56. p = p->next;
  57. }
  58. printf("清空成功\n");
  59. }
  60.  
  61. //判空
  62. int QueueEmpty(LinkQueue *Q){
  63. return Q->rear==Q->front;
  64. }
  65.  
  66. //队列长度
  67. int QueueLength(LinkQueue *Q){
  68. int len = ;
  69. QNode *p = Q->front->next;
  70. while(p){
  71. len++;
  72. p = p->next;
  73. }
  74. return len;
  75. }
  76.  
  77. //获取队头元素
  78. QElemType GetHead(LinkQueue *Q){
  79. if(Q->front != Q->rear){
  80. printf("队头元素是%d\n", Q->front->next->data);
  81. return Q->front->next->data;
  82. }else{
  83. printf("空链队,无头元素\n");
  84. return NULL;
  85. }
  86. }
  87.  
  88. //插入新元素到队尾
  89. int EnQueue(LinkQueue *Q, QElemType e){
  90. QNode *p = (QNode *)malloc(sizeof(QNode));
  91. p ->data = e;
  92. p->next = NULL;
  93. Q->rear->next = p;
  94. Q->rear = p;
  95. printf("元素%d插入成功\n", e);
  96. return ;
  97. }
  98.  
  99. //删除队头元素
  100. int DeQueue(LinkQueue *Q, QElemType *e){
  101. if(Q->front == Q->rear){
  102. printf("空链队,删除失败\n");
  103. return ;
  104. }
  105. QNode *p = Q->front->next;
  106. *e = p->data;
  107. printf("%d元素出链队\n", *e);
  108. Q->front->next = p->next;
  109. //最后一个元素被删除,队尾指针指向头节点
  110. if(Q->rear == p) Q->rear=Q->front;
  111. free(p);
  112. return ;
  113. }
  114.  
  115. //遍历
  116. void QueueTraverse(LinkQueue *Q){
  117. if(Q->front == Q->rear){
  118. printf("空链队\n");
  119. return;
  120. }
  121. QNode *p = Q->front->next;
  122. while(p){
  123. printf("%d ", p->data);
  124. p = p->next;
  125. }
  126. printf("\n");
  127. }
  128.  
  129. int main()
  130. {
  131. LinkQueue *Q = NULL;
  132. QElemType e = NULL;
  133.  
  134. //初始化测试
  135. Q = InitQueue(Q);
  136.  
  137. // //判空测试
  138. // if(QueueEmpty(Q)){
  139. // printf("空链栈\n");
  140. // }
  141. // EnQueue(Q, 1);
  142. // if(QueueEmpty(Q)){
  143. // printf("空链栈\n");
  144. // }
  145. // DeQueue(Q, &e);
  146. // if(QueueEmpty(Q)){
  147. // printf("空链栈\n");
  148. // }
  149.  
  150. // //长度测试
  151. // printf("链队长度为%d\n", QueueLength(Q));
  152. // EnQueue(Q, 1);
  153. // EnQueue(Q, 2);
  154. // printf("链队长度为%d\n", QueueLength(Q));
  155. // DeQueue(Q, &e);
  156. // DeQueue(Q, &e);
  157. // printf("链队长度为%d\n", QueueLength(Q));
  158.  
  159. // //遍历测试
  160. // QueueTraverse(Q);
  161.  
  162. // //获取头元素测试
  163. // e = GetHead(Q);
  164. // EnQueue(Q, 1);
  165. // EnQueue(Q, 2);
  166. // e = GetHead(Q);
  167. // DeQueue(Q, &e);
  168. // e = GetHead(Q);
  169.  
  170. // //入队测试
  171. // EnQueue(Q, 1);
  172. // EnQueue(Q, 2);
  173. // EnQueue(Q, 3);
  174. // EnQueue(Q, 4);
  175. // EnQueue(Q, 5);
  176. // EnQueue(Q, 6);
  177. // EnQueue(Q, 7);
  178. // QueueTraverse(Q);
  179.  
  180. // //出队测试
  181. // EnQueue(Q, 1);
  182. // EnQueue(Q, 2);
  183. // EnQueue(Q, 3);
  184. // EnQueue(Q, 4);
  185. // QueueTraverse(Q);
  186. // DeQueue(Q, &e);
  187. // printf("测试e是否改变:%d\n",e);
  188. // DeQueue(Q, &e);
  189. // printf("测试e是否改变:%d\n",e);
  190. // QueueTraverse(Q);
  191.  
  192. // //清空测试
  193. // EnQueue(Q, 1);
  194. // EnQueue(Q, 2);
  195. // ClearQueue(Q);
  196. // QueueTraverse(Q);
  197.  
  198. //销毁测试
  199. EnQueue(Q, );
  200. EnQueue(Q, );
  201. Q = DestroyQueue(Q);
  202. QueueTraverse(Q);
  203. }

纯C语言实现链队的更多相关文章

  1. 纯C语言实现链栈

    #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct StackNode{ E ...

  2. C语言实现链式队列

    链式队列,简称"链队列",即使用链表实现的队列存储结构. 链式队列的实现思想同顺序队列类似,只需创建两个指针(命名为 top 和 rear)分别指向链表中队列的队头元素和队尾元素, ...

  3. 纯C语言INI文件解析

    原地址:http://blog.csdn.net/foruok/article/details/17715969 在一个跨平台( Android .Windows.Linux )项目中配置文件用 IN ...

  4. 经典数独游戏+数独求解器—纯C语言实现

    "心常乐数独小游戏"(下面简称"本软件")是一款windows平台下的数独游戏软件. 本软件是开源.免费软件. 本软件使用纯C语言编写,MinGW编译,NSIS ...

  5. 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧拿出来拍啊

    花10天时间用C语言做了个小站 http://tieba.yunxunmi.com/index.html 简称: 云贴吧 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧 ...

  6. Javascript、C#、php、asp、python 等语言的链式操作的实现

    一.什么是链式操作 把需要的下一步操作的对象通过上一步操作返回回来.使完成某些功能具有持续性. 二.链式操作优点 代码更精简优雅.链式操作能大大精简代码量,多项操作一行代码一气呵成,搞定: 链式操作应 ...

  7. C++实现链队类——合肥工业大学数据结构实验5:链式队列

    实验5 5.1 实验目的 熟练掌握队列的顺序链式存储结构. 熟练掌握队列的有关算法设计,并在链队列上实现. 根据具体给定的需求,合理设计并实现相关结构和算法. 5.2 实验要求 5.2.1链队列实验要 ...

  8. geek青年的状态机,查表,纯C语言实现

    geek青年的状态机,查表,纯C语言实现 1. 问题的提出.抽象 建一,不止是他,不少人跟我讨论过这种问题:怎样才干保证在需求变更.扩充的情况下.程序的主体部分不动呢? 这是一个很深刻和艰难的问题.在 ...

  9. FastDFS是纯C语言实现,只支持Linux,适合以中小文件为载体的在线服务,还可以冗余备份和负载均衡

    一.理论基础 FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器. 分布式文件系统FastDFS FastDFS是纯C语言实现,只支持Linux.Fr ...

随机推荐

  1. XHR 对象实例所有的配置、属性、方法、回调和不可变值

    当我们声明了一个XMLHttpRequest对象的实例的时候,使用for-in来循环遍历一下这个实例(本文使用的是chrome45版本浏览器),我们会发现在这个实例上绑定了一些内容,我把这些内容进行了 ...

  2. Toast实现源码解析

    说明 本篇文章用于介绍Android中Toast的实现原理.和简单实现一个自定义的Toast. Toast实现 一般常用Toast格式为: Toast.makeText(context,"t ...

  3. this license XXXXXX has been cancelled

    this license XXXXXX has been cancelled问题解决:首先修改hosts 文件 加入0.0.0.0 account.jetbrains.comhosts 目录 wind ...

  4. fastdfs-nginx-module安装和配置

    fastdfs-nginx-module安装和配置 为什么要在fastdfs的storage端,安装fastdfs-nginx-module? 答案:https://www.cnblogs.com/l ...

  5. [Go] golang实现mysql连接池

    golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现 一般连 ...

  6. Docker Harbor

    简介: Harbor是一个用于存储Docker镜像的企业级Registry服务:本章将介绍如何搭建Harbor Registry! Github官方安装文档: https://github.com/g ...

  7. RAID10(5块硬盘)的简介和创建

    一.        RAID10简介 (1)兼具速度和安全性,但成本很高. (2)继承了RAID0的快速与RAID1的安全,RAID1在这里提供了冗余备份的阵列,而RAID0则负责数据的读写阵列.因这 ...

  8. (一)JVM快速回顾总结

    1,JVM内存结构(JVM体系概述,java8后的JVM) 2,GC的作用域(方法区和线程堆) 3,常见的垃圾回收算法 (1)引用计数 循环引用问题 (1) 那些对象可以作为GC_Root 虚拟机栈( ...

  9. 4. jenkins 构建任务

    这边说一下 ,服务器的分布.  因为我这边 测试环境的项目比较多,不能修改主机名 1号机器 节点机器(node) 最终项目发布到这台机器 2号机器  jenkins jenkins的部署,发布 3号机 ...

  10. pycharm 快速启动Django项目和python程序

    Django 设置 *.py