我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言数据结构之队列怎么定义与实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言数据结构之队列怎么定义与实现

今天小编给大家分享一下C语言数据结构之队列怎么定义与实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、队列的性质

上次我们学习栈,了解到栈储存释放数据的方式是:先进后出

而队列与其相反,队列是:先进先出,后进后出。

二、队列的结构

多个链表节点 + 头尾指针   (链表式队列)

链表节点负责存储数据;头节点 负责定位先进的起始数据,方便先出;

尾节点负责记录尾部数据,方便确定队列当前状态。

C语言数据结构之队列怎么定义与实现

三、代码实现

头文件

这里方便统一调用,将头尾指针定义成一个结构体 。 

#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<stdbool.h> typedef int Quetype;          //定义队列的数据类型 typedef struct QueNode        //定义数据节点{    struct QueNode* Next;    Quetype data;}QueNode; typedef struct Quetail        {                             struct QueNode* head;     //定义头尾指针    struct QueNode* tail;}Quetail; void Que_Init(Quetail* pq);                //队列的初始化void Que_Destory(Quetail* pq);             //队列的销毁void Que_push(Quetail* pq ,Quetype data);  //插入数据void Que_pop(Quetail* pq);                 //删除数据bool Que_Empty(Quetail* pq);               //判断队列是否为空int Que_size(Quetail* pq);                 //统计队列长度int Que_front(Quetail* pq);                //查找队列的头部数据

功能函数

队列的初始化:

将头尾指针置为NULL 方便后续使用。

void Que_Init(Quetail* pq)           //队列的初始化{    assert(pq);    pq->head = pq->tail = NULL;}

插入数据:

创建链表节点 >> 导入数据 >> 头部指针指向头节点 >> 尾部指针指向尾节点 

//插入数据void Que_push(Quetail* pq,Quetype data){     assert(pq);    QueNode* NewNode = (QueNode*)malloc(sizeof(QueNode));//创建节点    if (NewNode == NULL)    {        printf("Que_push->malloc");        exit(-1);    }    NewNode->Next = NULL;              NewNode->data = data;    if (pq->head == NULL)         //判断是否创建为头节点    {        pq->head = NewNode;       //更新头指针    }    else    {        pq->tail->Next = NewNode; //不为头节点,就正常链接在尾节点后    }    pq->tail = NewNode;           //更新尾指针}

删除数据:

记录头节点的下一个位置 >> 判断是否为最后的数据 >> 更新头指针

细节点:如果队列中还剩多个节点时,删除头节点后,尾指针始终指向尾节点,不需要改动;

但是如果只剩一个数据节点的话,删除后需要将尾指针置空。

C语言数据结构之队列怎么定义与实现

//删除数据void Que_pop(Quetail* pq){    assert(pq);                           assert(!Que_Empty(pq));         //判断队列是否为空    QueNode* Next = pq->head->Next; //记录删除数据的     if (pq->head == pq->tail)       //判断是否是最后的数据    {        free(pq->head);        pq->tail = NULL;            //更新尾指针    }    else    {        free(pq->head);                 }    pq->head = Next;                //更新头指针}

判断列表是否为空:

用bool 作为返回类型

C语言数据结构之队列怎么定义与实现

//判断队列是否为空bool Que_Empty(Quetail* pq){    assert(pq);    return pq->head == NULL;}

查找队列的头部数据:

判断队列是否为空 >> 返回头部数据

//查找队列的头部数据Quetype Que_front(Quetail* pq){    assert(pq);    assert(!Que_Empty(pq));    //判断队列是否为空    return pq->head->data;     //返回头部数据}

统计队列的长度:

就是统计有多少个链表节点

int Que_size(Quetail* pq){    assert(pq);    int size;    QueNode* pphead = pq->head;    for (size = 0; pphead; pphead = pphead->Next, size++);    return size;}

队列的销毁:

依次删除数据 >> 将申请空间释放

细节点:这里可以进行复用:判断队列是否为空 、 删除数据

void Que_Destory(Quetail* pq){    for (; !Que_Empty(pq); )  //判断队列是否为空    {        Que_pop(pq);          //删除数据    }}

C语言数据结构之队列怎么定义与实现

以上就是“C语言数据结构之队列怎么定义与实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言数据结构之队列怎么定义与实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言数据结构之队列怎么定义与实现

今天小编给大家分享一下C语言数据结构之队列怎么定义与实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、队列的性质上次我们
2023-07-02

C语言数据结构之栈与队列怎么相互实现

本篇内容介绍了“C语言数据结构之栈与队列怎么相互实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、用对列实现栈题干要求:细节分析:队列是
2023-07-02

C语言数据结构与算法之队列的实现详解

队列只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstInFirstOut)的原则。本文将通过实例详细说说队列的实现,需要的可以学习一下
2022-11-13

C#数据结构与队列怎么实现

这篇文章主要讲解了“C#数据结构与队列怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#数据结构与队列怎么实现”吧!C#数据结构与算法之队列是一种特殊的线性表,它只允许在表的前端(f
2023-06-18

Java数据结构之有效队列定义与用法示例

本文实例讲述了Java数据结构之有效队列定义与用法。分享给大家供大家参考,具体如下:/** * @描述 有序对列 * 从任何位置插入数据都是有序的 * @项目名称 Java_DataStruct * @包名 com.java.stack *
2023-05-30

Javascript数据结构之栈和队列怎么实现

本篇内容主要讲解“Javascript数据结构之栈和队列怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript数据结构之栈和队列怎么实现”吧!栈(stack)栈是一种具有 「
2023-06-30

C语言链式队列与循环队列怎么实现

这篇文章主要介绍了C语言链式队列与循环队列怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言链式队列与循环队列怎么实现文章都会有所收获,下面我们一起来看看吧。队列的实现队列是一种先进先出(First
2023-06-30

C语言数据结构之单链表怎么实现

本文小编为大家详细介绍“C语言数据结构之单链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言数据结构之单链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一.为什么使用链表在学习链表以前,
2023-07-02

C语言栈与队列怎么相互实现

本篇内容介绍了“C语言栈与队列怎么相互实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、本章重点用两个队列实现栈用两个栈实现队列解题思路
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录