数据结构-队列-005

1链式队列

运行结果如下:
在这里插入图片描述

1.1链式队列结点定义

/*自定义一个数据类型*/
typedef struct student
{
    char name[32];
    char sex;
    int age;
}DATA_TYPE;
/*定义一个链式队列结点*/
typedef struct link_queue_node
{
    DATA_TYPE data;//数据域
    struct link_queue_node *pnext;//指针域
}LINK_QUEUE_NODE;

1.2链式队列队头结点定义

/*定义一个链式队列头*/
typedef struct link_queue_head
{
    LINK_QUEUE_NODE *pfront;
    LINK_QUEUE_NODE *prear;
    int clen;
}LINK_QUEUE_HEAD;

1.3创建链式队列的队头

/*==========创建一个链队队头==========*/
LINK_QUEUE_HEAD *create_link_queue_head(void)
{
    LINK_QUEUE_HEAD *phead=NULL;

    /*创建一个链式队列的队头空间*/
    phead=malloc(sizeof(LINK_QUEUE_HEAD));
    if(NULL==phead)
    {
        perror("fail to malloc");
        return NULL;
    }

    /*初始化链式队列的队头*/
    phead->pfront=NULL;
    phead->prear=NULL;
    phead->clen=0;

    return phead;
}

1.4创建链式队列结点

/*==========创建一个链队结点==========*/
LINK_QUEUE_NODE *create_link_queue_node(DATA_TYPE data)
{
    LINK_QUEUE_NODE *pnode=NULL;

    /*创建一个链队结点空间*/
    pnode=malloc(sizeof(LINK_QUEUE_NODE));
    if(NULL==pnode)
    {
        perror("fail to malloc");
        return NULL;
    }

    /*初始化链队结点*/
    pnode->data=data;
    pnode->pnext=NULL;

    return pnode;
}

1.5判断非空链式队列

/*==========判断非空链队==========*/
int is_empty_link_queue(LINK_QUEUE_HEAD *link_queue)
{
    return NULL==link_queue->pfront;
}

1.6入队

/*==========链式队列入队-尾插法==========*/
int push_link_queue(LINK_QUEUE_HEAD *link_queue,LINK_QUEUE_NODE *pnode)
{
    if(is_empty_link_queue(link_queue))
    {
        link_queue->prear=pnode;//更新链式队头尾指针
        link_queue->pfront=pnode;//更新链式队头头指针
    }
    else
    {
        link_queue->prear->pnext=pnode;//更新尾结点指针为指向新结点
        link_queue->prear=pnode;//更新链式队头尾指针
    }
    link_queue->clen++;

    return 0;
}

1.7出队

/*==========链式队列出队-头删法*/
int pop_link_queue(LINK_QUEUE_HEAD *link_queue,DATA_TYPE *data)
{
    LINK_QUEUE_NODE *pnode=NULL;

    if(is_empty_link_queue(link_queue))
    {
        return -1;
    }

    pnode=link_queue->pfront;//备份待出队的队首结点
    link_queue->pfront=pnode->pnext;//更新链式队列指向队首的指针
    if(NULL==link_queue->pfront)
    {
        link_queue->prear=NULL;
    }
    if(data!=NULL)
    {
        *data=pnode->data;
    }
    free(pnode);
    link_queue->clen--;

    return 0;
}

1.8遍历链式队列

/*==========链式队列的遍历==========*/
void link_queue_for_each(LINK_QUEUE_HEAD *link_queue,void (*pfun)(LINK_QUEUE_NODE *))
{
    LINK_QUEUE_NODE *ptmp=NULL;

    ptmp=link_queue->pfront;//初始化链式队列结点类型的中间指针变量为队首
    while(1)
    {
        if(NULL==ptmp)
        {
            break;
        }

        pfun(ptmp);
        ptmp=ptmp->pnext;
    }
}

/*==========遍历方式==========*/
void show_data(LINK_QUEUE_NODE *pnode)
{
    printf("%-10s\t%-10c\t%-10d\n",pnode->data.name,pnode->data.sex,pnode->data.age);
}

1.9清空链式队列

/*==========清空链式队列==========*/
void clear_link_queue(LINK_QUEUE_HEAD *link_queue)
{
    while(1)
    {
        if(is_empty_link_queue(link_queue))
        {
            break;
        }

        pop_link_queue(link_queue,NULL);
    }
}

1.10销毁链式队列

/*==========销毁链式队列==========*/
void destroy_queue(LINK_QUEUE_HEAD *link_queue)
{
    clear_link_queue(link_queue);
    free(link_queue);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/491772.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot和SpringCloud面试题

1、SpringBoot 1.1 和Spring对比 1.2 SpringBoot自动装配 springboot的自动装配实际上就是为了从spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给spring容器来帮我们进行管理 原理 SpringBootApplicatio…

BUUCTF-Misc13

[ACTF新生赛2020]outguess1 1.打开附件 2.outguess outguess -k "abc" -r mmm.jpg flag.txt “-k “abc”” 表示使用密码 “abc” 进行解密; “-r” 表示提取信息的操作; “mmm.jpg” 是包含隐藏信息的源图像文件; “flag.txt” …

共用体详解

1 共用体的概念 有时需要使几种不同类型的变量存放到同一段内存单元中。例如,可把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中(见图11.24)。以上3个变量在内存中占的字节数不同,但都从同一地址开始(图中设地址为1000)存放。也就是使用覆盖技术…

“数据持久化”和“缓存与数据库不一致”到底有什么区别?

之前,我一直把“数据持久化”和“缓存与数据库不一致问题”给搞混了。我当时复习的时候基本上就没有思考,就是纯背诵,数据持久化是什么,数据持久化有两种方式,这两种方式特点是什么,然后巴拉巴拉一堆。缓存…

LC 100.相同的树

100. 相同的树 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入: p [1,2,3], q [1,2,3] 输出&#xff1…

【pytest、playwright】构建POM项目,以及解决登录问题,allure环境问题

目录 前言 1、文件目录 2、安装依赖 3、POM项目实战-案例:打开指定页面 目录结构: pages中的代码: cases中的代码: 4、解决登录问题 问题: 解决方案: 获取登录的用户信息(cookie&a…

GTC 2024 火线评论:DPU 重构文件存储访问

编者按:英伟达2024 GTC 大会上周在美国加州召开,星辰天合 CTO 王豪迈在大会现场参与了 GPU 与存储相关的最新技术讨论,继上一篇《GTC 2024 火线评论:GPU 的高效存储利用》之后,这是他发回的第二篇评论文章。 上一篇文章…

数据意外变化导致条件判断流程异常

1. 问题描述 用户使用的 MCU 型号是 STM32H750VB。 在客户的代码中有多个条件语句,在条件里面的变量数值没有变化的情况下执行了条件里面的逻辑。 有点类似如下 C 语句 : If(变量 A !0) {//执行一些指令 }即变量 A 在明明没有变化且条件不满足的情况下, 程序运行时…

程序员卷王的简历

这真是一份淋漓尽致、低入尘埃、舔到骨髓的优势。 但从一个hr的角度来看,依然有可以继续提升的地方。 比如: 优势第一条本身就有问题,不懂劳动法?你怎么还会有劳动法这个概念!你知道“劳动法”本身,这个…

自动采集实时海量主流电商平台API数据接口,让你拥有一手绝对好牌!

前言 你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。 平时需要从某些电商网站上抓取数据,那么这里以淘宝为示例给大家演示。这…

selenium元素定位--xpath定位--层级与逻辑组合定位

其他元素非唯一时,又不想用xpath绝对定位时,需要用到层级与逻辑定位. 一、层级属性结合定位: 遇到元素没有class、name、id等或属性动态变化情况时,可以找父节点元素,父级节点没有id时,可以继续往上找id&…

HeidiSQL导出SQL文件

目前开发阶段的数据库可视化工具逐渐转为了HeidiSQL,本文讲一讲导出到sql文件的小细节,给自己做个记录补充。 安装或数据库可视化工具比较可参考: windows下全免费手动搭建php8mysql8开发环境及可视化工具安装 导出 原来用Navicat的时候&am…

git下载安装教程

git下载地址 有一个镜像的网站可以提供下载: https://registry.npmmirror.com/binary.html?pathgit-for-windows/图太多不截了哈哈,一直next即可。

macOS Sonoma 14.4.1 (23E224) 正式版发布,ISO、IPSW、PKG 下载

macOS Sonoma 14.4.1 (23E224) 正式版发布,ISO、IPSW、PKG 下载 2024 年 3 月 26 日凌晨,macOS Sonoma 14.4.1 更新修复了一个可能导致连接到外部显示器的 USB 集线器无法被识别的问题。它还解决了可能导致 Java 应用程序意外退出的问题,并修…

淘宝详情数据采集(商品上货,数据分析,属性详情,价格监控),海量数据值得get

淘宝详情数据采集涉及多个环节,包括商品上货、数据分析、属性详情以及价格监控等。在采集这些数据时,尤其是面对海量数据时,需要采取有效的方法和技术来确保数据的准确性和完整性。以下是一些关于淘宝详情数据采集的建议: 请求示…

基于 MCSDK5.4.8 电机库修改两电阻采样方法

1. 前言 在当前使用的电机电阻采样方式中分为单电阻,双电阻,三电阻三种方式,其中在 ST MCSDK5.4 库中支持了两种采样方式,单电阻和三电阻,在市面还存在另外一种采样方式,即双电阻采样,本文讨论…

机器学习:数据降维主成分分析PCA

一、引言 1.数据分析的重要性   在当今的信息爆炸时代,数据已经渗透到各个行业和领域的每一个角落,成为决策制定、科学研究以及业务发展的重要依据。数据分析则是从这些数据中提取有用信息、发现潜在规律的关键手段。通过数据分析,我们能够…

【QGIS基于边界裁剪DEM】

文章目录 1、前言2、操作步骤 1、前言 QGIS内置的栅格裁剪工具(如Raster Clipping)操作简便,允许用户使用矢量图层作为裁剪掩膜,灵活定义裁剪区域。基于QGIS对相关数据依据边界进行裁剪,可以更好地进行数据可视化展示…

iOS - Runtime - Class-方法缓存(cache_t)

文章目录 iOS - Runtime - Class-方法缓存(cache_t)1. 散列表的存取值 iOS - Runtime - Class-方法缓存(cache_t) Class内部结构中有个方法缓存(cache_t),用散列表(哈希表)来缓存曾经调用过的方法,可以提高…

车载以太网AVB交换机 TSN交换机 时间敏感网络 6端口 百兆 SW100TSN

SW100 TSN时间敏感网络AVB交换机 为6端口百兆车载以太网交换机,其中包含5通道100BASE-T1泰科MATEnet接口和1个通道100/1000BASE-T标准以太网(RJ45接口),可以实现纳米级时间同步,车载以太网多通道交换,Bypass数据采集和监控等功能&…