数据结构-队列-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.mzph.cn/news/773541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是甲状腺相关眼病,四川眼科医院院长孙丰源教授这么说!

近年来,随着人们健康意识的逐渐增强,越来越多人开始关注甲状腺疾病。甲状腺是人体最大的内分泌腺,是维护人体健康的关键,它一旦发生异常,则会危害到多个器官和组织。不同的甲状腺疾病会呈现不同的症状,比如…

C# 快速将数据写入 Excel 单元格

目录 性能问题 Excel元素结构及写入原理 范例运行环境 配置Office DCOM 实现代码 组件库引入 核心代码 WriteArrayToExcel 神奇的 911 事件 小结 性能问题 将生成或查询到的数据,导出到 Excel 是应用中常用的一项功能。其中一些标准的写入单元格的方法如…

智慧公厕,让数据和技术更好服务社会生活

智慧公厕,作为智慧城市建设中不可忽视的一部分,正逐渐受到越来越多人的关注。随着科技的不断进步,智能化公厕已经成为一种趋势,通过数据的流转和技术的整合,为社会生活带来了更好的服务。本文以智慧公厕源头实力厂家广…

基于51单片机的酒精检测警报系统Proteus仿真

地址:https://pan.baidu.com/s/1gddplAxS_ZKyrHaWE93dog 提取码:1234 仿真图: 芯片/模块的特点: AT89C52简介: AT89C52是一款经典的8位单片机,是意法半导体(STMicroelectronics)公…

最新的Flutter3.x版本获取应用包名的方法

以前的flutter项目可以在 AndroidManifest.xml 中获取应用包名, 最新的Flutter3.x版本要获取应用包名可以找到build.gradle 更多内容参考:最新的Flutter3.x版本如何获取应用包名

Linux:Jenkins全自动持续集成持续部署(4)

在上一章部署好了之后,还需要点击一下才能进行部署,本章的效果是:当gitlab上的代码发生了变化后,我们不需要做任何事情不需要去点击构建按钮,Jenkins直接自动检测变化,然后自动去集成部署Linux:…

(一)手把手教你如何通过ARM DesignStart计划在FPGA上搭建一个Cortex-M3软核

(一)手把手教你如何通过ARM DesignStart计划在FPGA上搭建一个Cortex-M3软核 一、ARM DesignStart计划 1.1 如何下载ARM DesignStart Cortex-M3相关文件 ​ 关于ARM DesignStart计划的介绍:ARM DesignStart计划——私人定制一颗ARM处理器 - 知乎 (zhih…

docker在线安装centos7(windows版)

目录 1、docker本地安装2、拉取centos7镜像3、启动容器4、配置SSH以访问centos7 1、docker本地安装 windows安装docker比较简单,官网搜索有个docker desktop装上就完事。 2、拉取centos7镜像 可以登录到docker hub上拉,也可以搜出来对应的centos7镜像…

Kindling the Darkness:A Practical Low-light Image Enhancer

Abstract 在弱光条件下拍摄的图像通常会出现(部分)可见度较差的情况。,除了令人不满意的照明之外,多种类型的退化也隐藏在黑暗中,例如由于相机质量有限而导致的噪点和颜色失真。,换句话说,仅仅调高黑暗区域的亮度将不…

蓝桥杯练习系统(算法训练)ALGO-966 自行车停放

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 有n辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行…

对标开源3D建模软件blender,基于web提供元宇宙3D建模能力的dtns.network德塔世界是否更胜一筹?

对标开源3D建模软件blender,基于web提供元宇宙3D建模能力的dtns.network德塔世界是否更胜一筹? blender是一款优秀的3D建模开源软件,拥有免费开源、功能强大、渲染速度优秀的优点。而开源的dtns.network德塔世界,亦是专业级的元宇…

FPGA之组合逻辑与时序逻辑

数字逻辑电路根据逻辑功能的不同,可以分成两大类:组合逻辑电路和时序逻辑电路,这两种电路结构是FPGA编程常用到的,掌握这两种电路结构是学习FPGA的基本要求。 1.组合逻辑电路 组合逻辑电路概念:任意时刻的输出仅仅取决…

2024年福建事业单位招聘详细流程

2024年福建事业单位招聘详细流程,速速查收!

使用Nginx1.25.4版本做负载均衡、搭建Nacos2.3.0服务集群

关于使用版本问题上,其实小白更喜欢使用新的版本,因为新的版本功能更多,肯定优化方面不言而喻,懂得都懂,但是新的版本,肯定使用起来更加的速度,性能,也是不言而喻的啊,那…

US-T65 DM蓝牙5.2双模热插拔PCB

键盘使用说明索引(均为出厂默认值) 一些常见问题解答(FAQ)注意首次使用步骤蓝牙配对(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功能层1配置的功能默认的快捷键 蓝牙参数蓝牙MAC地址管理…

求助:配置脚手架代理,跨域问题proxyTable配置无效,访问后显示404?

已经在这里卡了一天了。找了很多解决办法,比如重启,修改proxytable等等,但是每次但是404,求助各位大佬,怎么解决? 1、代码 (1)config的index.js (2) App.v…

python爬虫-----输入输出与流程控制语句(第四天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

.NET6.0智慧医院手术室麻醉管理平台源码

目录 一、手麻系统概述 二、系统开发环境 三、手麻系统功能 手术进程 手术排班 手术记录 术前访视与评估 术中麻醉记录 麻醉总结 术后访视 模版配置 自动评分 文书模板 ​​​​​​​ 一、手麻系统概述 手术麻醉临床信息系统有着完善的临床业务功能,…

YOLOv8融入低照度图像增强算法---传统算法篇

YOLOv8n原图检测YOLOv8n增强后检测召回率和置信度都有提升 前言 这篇博客讲讲低照度,大家都催我出一些内容,没想到这么多同学搞这个,恰好我也做过这方面的一些工作,那今天就来讲解一些方法,低照度的图像增强大体分“传统算法”和“深度学习算法”; 目前低照度的图像增…

每日一题 --- 数组中的第 K 个最大元素[力扣][Go]

数组中的第 K 个最大元素 题目:数组中的第 K 个最大元素 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1…