队列所需要的头文件

先给类型重命名 意义前几篇有讲

队列要用到的两个结构体

第一个结构体里面有 1.存储数据的 a 2.指向下一个节点的指针

重命名为Queue(这里的名字需要记一下,等会需要分辨两个结构体,结构体两个的功能是不一样的)

第二个结构体里面有 1.指向头的头指针 2.指向尾的尾指针

重命名尾Qnene

队列实现的函数功能有: 1.初始化队列 2.队尾入数据 3.队头出数据 4.获取队列的有效元素个数 5.判断队列是否为空 6.获取队列头部数据 7.获取队列尾部数据 8.销毁队列

1.初始化队列

初始化我们直接把头和尾置尾空(第一个结构体是包含着第二个结构体的,所以初始化第二个结构体就可以了)

2.队尾入数据

因为是要入数据,所以我们要先申请一个空间(并且把数据放入到新空间中)

入数据是有两种情况

1.第一次入,队列是没有数据的,所以我们要先进行单独处理

直接在头和尾的位置入数据(因为第一次没数据,头和尾是重叠在一起的)

2.已经入过了,队列中已经存在其他的数据,所以我们直接在队尾后面入数据

 3.队头出数据

1.若这个队列中只剩下一个数据了,那么我们可以直接删除数据后,并且释放掉整个队列

2.若队列中不止一个数据,那么先存储一个队头的下一个数据,再释放掉对头,再让对头的指针指向存储的数据

 4.获取队列中有效的数据个数

这把我们使用遍历的方法

1.先定义一个size,用来计算队列中的个数

2.先从队头开始,每次都++size,直接空。

3.最后返回size的个数

 5.判断队列是否为空

用bool类型来返回

我们判断队头是否为空就可以了

 6.获取队头的数据

返回队头用来存储数据的a

7.获取队尾的数据 

返回队尾用来存储数据的a

 8.销毁队列

先创建一个存放队头的(命名为tist),再来一个存放对头的下一个数据(命名为cur)。

先释放tist,再把cur给tist。就此循环

最后把头和尾的指针置空

9.队列的打印

这里不需要用到单独的函数实现,置需要把前几个实现的函数结合起来用

1.先判断队列是否为空

2.再打印返回的头元素

3.再掉头元素

 这样队列的全部功能就实现了!

接下来是源码,需要自取

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>typedef int STDataType;typedef struct Quene
{struct Quene* next;STDataType a;
}Queue;typedef struct Qnene
{Queue* head;Queue* tail;
}Qnene;//初始化
void QueueInit(Qnene* q)
{assert(q);q->head = q->tail = NULL;
}void QueuePush(Qnene* q, STDataType data)
{assert(q);Queue* newnode = (Queue*)malloc(sizeof(Queue));newnode->a = data;newnode->next = NULL;//如果队列没有数据要做单独处理if (q->tail == NULL){q->head = q->tail = newnode;}//如果队列已经有数据了else{q->tail->next = newnode;q->tail = newnode;}
}void QueuePop(Qnene* q)
{assert(q);//如果队列中只有一个数据,那么删除这个数据就是空了if (q->head->next == NULL){free(q->head);q->head = q->tail = NULL;}else{Queue* tist = q->head->next;free(q->head);q->head = tist;}}STDataType QueueFront(Qnene* q)
{assert(q);return q->head->a;
}STDataType QueueBack(Qnene* q)
{assert(q);return q->tail->a;
}int QueueSize(Qnene* q)
{assert(q);int size = 0;Queue* tist = q->head;while (tist){++size;tist = tist->next;}return size;
}bool QueueEmpty(Qnene* q)
{assert(q);return q->head == NULL;
}void QueueDestroy(Qnene* q)
{assert(q);Queue* tist = q->head;while (tist){Queue* cur = tist->next;free(tist);tist = cur;}q->head = q->tail = NULL;
}void Intenode()
{Qnene st;初始化队列 QueueInit(&st);队尾入队列 QueuePush(&st, 1);QueuePush(&st, 2);QueuePush(&st, 3);QueuePush(&st, 4);获取队列队尾元素 int size= QueueSize(&st);printf("队列中有%d个数据\n", size);检测队列是否为空while (!QueueEmpty(&st)){获取队列头部元素 printf("%d ", QueueFront(&st));队头出队列 QueuePop(&st);}//获取队列尾部元素//QueueBack(&st);销毁队列 QueueDestroy(&st);
}

C语言---队列(详解)---数据结构相关推荐

  1. JavaScript数据结构与算法——队列详解(下)

    接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...

  2. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

  3. Linux_arm_启动_c语言部分详解,[原创]Linux arm 启动 c语言部分详解第四讲

    Linux arm启动c语言部分详解第四讲(from setup_per_cpu_areas();) Written by leeming 上面的setup_arch花了我们大量的篇幅,现在我们要继续 ...

  4. 转:Java 7 种阻塞队列详解

    转自: Java 7 种阻塞队列详解 - 云+社区 - 腾讯云队列(Queue)是一种经常使用的集合.Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表. ...

  5. Go语言slice详解

    Go语言slice详解 Go语言中的slice表示一个具有相同类型元素的可变长序列,语言本身提供了两个操作方法: 创建:make([]T,len,cap) 追加: append(slice, T -) ...

  6. MQ消息队列详解、四大MQ的优缺点分析

    MQ消息队列详解.四大MQ的优缺点分析 前言 面试题切入 面试官心理分析 面试题剖析 ①为什么要使用MQ 系统解耦 异步调用 流量削峰 消息队列的优缺点 四大主流MQ(kafka.ActiveMQ.R ...

  7. R语言——数据类型详解

    R语言--数据类型详解 R语言支持的数据类型 数值型 整数型 逻辑型 字符型 复数型 原生型 R语言的数据对象类型包括 向量:一个向量只能有一种数据类型 矩阵:一个矩阵只能有一种数据类型 数组:一个数 ...

  8. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  9. python语言入门m-Python语言入门详解!快速学成Python!

    今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...

最新文章

  1. android 自定义正方形 绕中心点旋转
  2. Java内存模型、volatile、原子性、可见性、有序性、happens-before原则
  3. Boost:宏BOOST_TEST_EQ的测试
  4. 智能商业大会构造信息化交流平台
  5. Linux下如何抓取串口码流,linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系...
  6. Oracle函数大全1
  7. 计算机启动进入不了桌面图标,电脑开机后不显示桌面图标如何通过修改注册表解决问题...
  8. OPPO或将于本月推出Find X2 英雄联盟 S10 限定版
  9. python异步爬虫_Python异步爬虫试验[Celery,gevent,requests]
  10. java day12第十二课 泛型和枚举
  11. MyCat分片规则之取模分片
  12. spring boot 搭建博客
  13. 基于docker的wekan部署
  14. python随机出100道加法题_python3 随机生成10以内的加法算术题
  15. linux实现进度条
  16. 学术论文投稿第五弹——如何写Discussion
  17. 分数阶傅立叶变换程序汇总(转载)
  18. 2019年北京理工大学计算机专硕上岸经验分享
  19. 量化投资入门指南:风险模型和交易成本模型
  20. 安卓app开发方案_「安卓APP开发流程」安卓APP如何开发的?

热门文章

  1. Python:30行代码,使用POST登录山大的教务处系统(附完整源码)
  2. 如何处理网站被植入恶意的一些代码导致的被机房拦截提示
  3. html免费编辑器图片alt,织梦模板kindeditor编辑器图片上传增加图片说明alt属性和title属性...
  4. elastic-job分片规则
  5. 使用DLL引起的error LNK2019: 无法解析的外部符号
  6. autolayout心得
  7. Map小结(java)
  8. QT:颜色拾取器的实现
  9. 安装LEGO软件遇到的问题
  10. CSS 框模型概述 CSS 框模型 (Box Model) 规定了元素框处理元素内容、内边距、边框 和 外边距 的方式...