链式队列算法库构建

学习贺利坚老师课程,构建链式队列算法库

数据结构之自建算法库——链队(链式队列)_数据结构函数链队列的算法框架有哪些-CSDN博客文章浏览阅读6.2k次,点赞3次,收藏9次。本文针对数据结构基础系列网络课程(3):栈和队列中第10课时队列的链式存储结构及其基本运算的实现。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。链队算法库采用程序的多文件组织形式,包括两个文件:      1.头文件:liqueue.h,包含定义链队数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef LIQUEUE_H_INCLUDED#de_数据结构函数链队列的算法框架有哪些https://blog.csdn.net/sxhelijian/article/details/48464501本人详细解析博客

队列的链式存储结构及其基本运算实现_队列结构及运算的实现-CSDN博客文章浏览阅读1.3k次,点赞5次,收藏7次。前面我们介绍了顺序队列的存储 ,是利用数组存储数据 , 然后删除节点数据和添加节点数据都是在数组完成的 , 有一个弊端就是 ,当我们操作的数量很大时 , 如果数组存储结构就很难队列操作了 ,那就需要利用链式存储结构了_队列结构及运算的实现https://blog.csdn.net/qq_57484399/article/details/127365820

版本更新日志:

v1.0: 对原始博客, 命名进行重构, 更有可读性

V1.0

函数功能:

//(1)初始化链队
void Init_chain_queue(chain_queue *&init_queue);
//(2)销毁链队
void Destroy_chain_queue(chain_queue *&destroy_queue);
//(3)判断链队是否为空
bool Empty_chain_queue(chain_queue *judge_queue);
//(4)遍历计算并返回链队的元素个数
int Length_chain_queue(chain_queue *measure_queue);
//(5)入队
void Enter_chain_queue(chain_queue *&enter_queue, ElemType enter_elem);
//(6)出队
bool Out_chain_queue(chain_queue *&out_queue, ElemType &out_value);

chain_queue.h头文件:

#ifndef _CHAIN_QUEUE_H_INCLUDED_
#define _CHAIN_QUEUE_H_INCLUDED_typedef char ElemType;
typedef struct chain_queue_Node
{ElemType data;struct chain_queue_Node *next;}chain_queue_Node;  //链队数据节点定义typedef struct
{chain_queue_Node *chain_queue_front;chain_queue_Node *chain_queue_rear;}chain_queue;     //链队类型定义//(1)初始化链队
void Init_chain_queue(chain_queue *&init_queue);
//(2)销毁链队
void Destroy_chain_queue(chain_queue *&destroy_queue);
//(3)判断链队是否为空
bool Empty_chain_queue(chain_queue *judge_queue);
//(4)遍历计算并返回链队的元素个数
int Length_chain_queue(chain_queue *measure_queue);
//(5)入队
void Enter_chain_queue(chain_queue *&enter_queue, ElemType enter_elem);
//(6)出队
bool Out_chain_queue(chain_queue *&out_queue, ElemType &out_value);#endif // _CHAIN_QUEUE_H_INCLUDED_

chain_queue.cpp

#include <stdio.h>
#include <malloc.h>
#include "chain_queue.h"/**************************************************
(1)函数名: Init_chain_queue
功  能: 初始化链队
参  数: chain_queue *&init_queue
思  路: 分配空间-链队首尾指针置空
返回值: 无
**************************************************/
void Init_chain_queue(chain_queue *&init_queue)
{init_queue = (chain_queue *)malloc(sizeof(chain_queue));init_queue->chain_queue_front = NULL;init_queue->chain_queue_rear = NULL;
}
/**************************************************
(2)函数名: Destroy_chain_queue
功  能: 销毁链队
参  数: chain_queue *&destroy_queue:要进行销毁的队列
思  路: 和数组有区分,我们这里要遍历释放,释放的同时,要记录后继元素
返回值: 无(只有成功,没有失败)
**************************************************/
void Destroy_chain_queue(chain_queue *&destroy_queue)
{chain_queue_Node *delete_Node;  //删除的节点chain_queue_Node *follow_Node;  //删除节点的后继线索节点//初始要删除的节点, 指向首指针指向的节点delete_Node = destroy_queue->chain_queue_front;if(delete_Node != NULL){//记录后继节点follow_Node = delete_Node->next;//当后继节点不为空时, 往后走while(follow_Node != NULL){//释放当前节点free(delete_Node);delete_Node = follow_Node;follow_Node = delete_Node->next;}}//否则free(delete_Node);//销毁此节点free(destroy_queue);//销毁首尾指针}/**************************************************
(3)函数名: Empty_chain_queue
功  能: 判断链队是否为空
参  数: chain_queue *judge_queue: 要进行判断是否为空的链队的指针
思  路: 首尾指针是否都为空
返回值: bool: 队列是否为空? true,空:false,非空
**************************************************/
bool Empty_chain_queue(chain_queue *judge_queue) //判断链队是否为空
{return (judge_queue->chain_queue_rear == NULL);
}
/**************************************************
(4)函数名: Length_chain_queue
功  能: 遍历计算并返回链队的元素个数
参  数:chain_queue *measure_queue: 要进行测量元素个数的链队
思  路: 定义节点,遍历链队, 同步跟随,计算个数
返回值: int: 返回元素个数
**************************************************/
int Length_chain_queue(chain_queue *measure_queue)
{int counter = 0;chain_queue_Node *measure_Node;//测量节点measure_Node = measure_queue->chain_queue_front;while(measure_Node != NULL){counter++;measure_Node = measure_Node->next;    //同步跟随}return counter;
}
/**************************************************
(5)函数名: Enter_chain_queue
功  能: 链队入队
参  数: (1)chain_queue *&enter_queue: 要入队的链队的指针地址(2)ElemType enter_elem: 入队的元素值
思  路: 链队入队数量不限制,只是需要区分一下指针指引,一个元素和两个元素.队列内无元素, 则需要同时修改两个指针对内有元素, 则只修改尾指针即可
返回值: 无
**************************************************/
void Enter_chain_queue(chain_queue *&enter_queue, ElemType enter_elem)
{chain_queue_Node *enter_Node;   //入队节点enter_Node = (chain_queue_Node *)malloc(sizeof(chain_queue_Node));enter_Node->data = enter_elem;enter_Node->next = NULL;//分如果一个节点和多个节点,指针指引问题if(enter_queue->chain_queue_rear == NULL){enter_queue->chain_queue_front = enter_Node;//首尾指针指向入队节点enter_queue->chain_queue_rear = enter_Node;}else{//将入队节点,链接到队尾enter_queue->chain_queue_rear->next = enter_Node;//尾指针指向入队节点enter_queue->chain_queue_rear = enter_Node;}}
/**************************************************
(6)函数名: Out_chain_queue
功  能: 出队
参  数: chain_queue *&out_queue, ElemType &out_value
注  意:  出队则需要注意,队内是否有元素,有元素,也要区分一个元素和多个元素因为只有一个元素,出队,则需要同时修改首尾指针指向空多个元素,则只需要修改队首指针
返回值: bool:是否出队成功? true,成功,队内有元素:false,失败,队内无元素
**************************************************/
bool Out_chain_queue(chain_queue *&out_queue, ElemType &out_value)//出队
{chain_queue_Node *out_Node;//判断链队是否为空if(Empty_chain_queue(out_queue)){return false;}//锁定出队节点out_Node = out_queue->chain_queue_front;//队列只有一个节点if(out_queue->chain_queue_front == out_queue->chain_queue_rear){out_queue->chain_queue_front = out_queue->chain_queue_rear = NULL;}else           //队列中有多个节点{out_queue->chain_queue_front = out_queue->chain_queue_front->next;}out_value = out_Node->data;free(out_Node);return true;
}

main.cpp测试函数

#include <stdio.h>
#include "chain_queue.h"int main()
{ElemType test_value;chain_queue *test_queue;printf("(1)初始化链队test_queue\n");Init_chain_queue(test_queue);printf("\n依次进链队元素a,b,c\n");Enter_chain_queue(test_queue,'a');Enter_chain_queue(test_queue,'b');Enter_chain_queue(test_queue,'c');printf("\n(3)链队为%s\n",(Empty_chain_queue(test_queue)?"空":"非空"));if(Out_chain_queue(test_queue,test_value) == 0){printf("\n队空,不能出队\n");}else{printf("\n(4)出队一个元素%c)\n",test_value);}printf("\n(5)链队q的元素个数为:%d\n",Length_chain_queue(test_queue));printf("\n(6)依次进链队元素d,e,f\n");Enter_chain_queue(test_queue,'d');Enter_chain_queue(test_queue,'e');Enter_chain_queue(test_queue,'f');printf("\n(7)链队test此时的元素个数是%d\n",Length_chain_queue(test_queue));printf("\n(8)出链队序列:\n");while(!Empty_chain_queue(test_queue)){Out_chain_queue(test_queue,test_value);printf("\n%c\n",test_value);}printf("\n(9)释放队列\n");Destroy_chain_queue(test_queue);return 0;
}

运行结果

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

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

相关文章

在win7系统电脑安装node16的版本(已成功安装运行)

很多银行的项目行方都要求内网开发&#xff0c;但是我遇到的几个银行基本都是win7系统的电脑&#xff0c;而前端的项目又是需要高版本的node才能跑起来&#xff0c;所有就记录此解决方案文章&#xff01; 这是下载node安装包的地址&#xff1a;Index of /dist/ 在这里先下载自…

树形结构的勾选、取消勾选、删除、清空已选、回显、禁用

树形结构的勾选、取消勾选、删除、清空已选、回显、禁用 基本页面&#xff1a; 分为上传文件和编辑的页面 代码实现要点&#xff1a; 上传文件页面&#xff1a; 点开选择范围弹窗&#xff0c;三个radio单选框都为可选状态&#xff0c;默认显示的是第一个单选框&#xff08;按…

晶方科技:台积电吃饱,封装迎春?

半导体产业链掀起涨价潮&#xff0c;先进封装迎接利好。 这里我们来聊国内先进封装企业——晶方科技。 近期&#xff0c;由于产能供不应求&#xff0c;台积电决定上调先进封装产品价格&#xff0c;还表示订单已经排到2026年。 大哥吃不下了&#xff0c;剩下的订单全都是空间。…

Shell编程规范与变量-01

一、Shell脚本概述 在一些复杂的 Linux 维护工作中&#xff0c;大量重复性的输入和交互操作不仅费时费力&#xff0c;而且容易出错&#xff0c;而编写一个恰到好处的 Shell 脚本程序&#xff0c;可以批量处理、自动化地完成一系列维护任务&#xff0c;大大减轻管理员的负担。 1…

在Ubuntu上安装Python3

安装 python3 pip sudo apt -y install python3 python3-pip升级 pip python3 -m pip install --upgrade pip验证查看版本 python3 --version

web渗透-SSRF漏洞及discuz论坛网站测试

一、简介 ssrf(server-side request forgery:服务器端请求伪造&#xff09;是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;ssrf是要目标网站的内部系统。(因为他是从内部系统访问的&#xff0c;所有可以通过它攻击外网无法访问的内部系统&…

excel字符串列的文本合并

excel表有两列&#xff0c;第一列是“姓名”&#xff0c;第二列是“诊断”&#xff0c;有高血压、糖尿病等。我想出一个统计表&#xff0c;统计“姓名”&#xff0c;把某一个姓名的诊断不重复的用、拼接起来&#xff0c;比如“张三”的诊断为“点高血压”、糖尿病。我们可以用T…

适用于轨道交通专用的板卡式网管型工业以太网交换机

是网管型 CompactPCI板卡式冗余环网交换机。前面板带有6个 10/100/1000Base-T(X)M12接口。后面的CPCI接口有 8个10/100/1000Base-T (X) 以太网接口。 是特别为轨道交通行业EN50155标准要求而设计的坚固型交换机。它同时具有以下特性&#xff1a; ● 支持2线以太网距离扩展端口&…

springcloud第4季 springcloud-alibaba之nacos+openfegin+gateway+sentinel熔断限流【经典案例】

一 说明 1.1 架构说明 本案例实现原理&#xff1a; 采用alibaba的nacos&#xff0c;openfegin&#xff0c;sentinel&#xff0c;gateway等组件实现熔断限流。 主要理解sentinel的ResouceSentinel和fallback的区别联系。 ResourceSentinel 主要是页面配置熔断限流规则&#…

试析C#编程语言的特点及功能

行步骤&#xff0c;而不必创建新方法。其声明方法是在实例化委托基础上&#xff0c;加一对花括号以代表执行范围&#xff0c;再加一个分号终止语句。 2.3.3 工作原理 C#编译器在“匿名”委托时会自动把执行代码转换成惟一命名类里的惟一命名函数。再对存储代码块的委托进行设…

【干货】Vue3 组件通信方式详解

前言 毫无疑问&#xff0c;组件通信是Vue中非常重要的技术之一&#xff0c;它的出现能够使我们非常方便的在不同组件之间进行数据的传递&#xff0c;以达到数据交互的效果。所以&#xff0c;学习组件通信技术是非常有必要的&#xff0c;本文将总结Vue中关于组件通信的八种方式…

【博士每天一篇文献-算法】Fearnet Brain-inspired model for incremental learning

阅读时间&#xff1a;2023-12-16 1 介绍 年份&#xff1a;2017 作者&#xff1a;Ronald Kemker&#xff0c;美国太空部队&#xff1b;Christopher Kanan&#xff0c;罗切斯特大学 期刊&#xff1a; arXiv preprint 引用量&#xff1a;520 Kemker R, Kanan C. Fearnet: Brain-…

宠物领养救助管理系带万字文档java项目基于springboot+vue的宠物管理系统java课程设计java毕业设计

文章目录 宠物领养救助管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 宠物领养救助管理系统 一、项目演示 宠物领养救助系统 二、项目介绍 基于springbootv…

WEB与低代码:B/S架构在开发中的应用与优势

在互联网迅猛发展的今天&#xff0c;WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化&#xff0c;开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构&#xff08;Browser/Server Architecture&#xff09;作为一种常见的WEB应用架构…

Chatopera 云服务实现类海尔服务智能客服的功能点比较 | Chatopera

在上一篇文章中&#xff0c;我分享了《智能客服体验分析&#xff0c;使用小程序海尔服务完成电器报修》。如果使用 Chatopera 云服务实现一个类似的应用&#xff0c;如何做呢&#xff1f;借助 Chatopera 云服务 可以实现一个智能客服&#xff0c;那么和现在的海尔服务小程序会有…

WordPress软件下载主题Inpandora

Inpandora&#xff08;中文名为潘多拉&#xff09;是一款基于软件下载站定制的WordPress主题&#xff0c;帮助站长使用WordPress快速搭建一个专业的WordPress软件博客。Inpandora这款WordPress主题可以说是因软件而生&#xff0c;从UI设计到后台设置功能&#xff0c;都充分体现…

云计算运维工程师的突发状况处理

云计算运维工程师在应对突发的故障和紧急情况时,需要采取一系列迅速而有效的措施来最小化服务中断的时间并恢复系统的稳定性。 以下是一些关键步骤和策略: 快速响应: 立即识别并确认故障的性质和范围。通知团队成员和相关的利益相关者,确保所有人了解当前情况。故障诊断:…

MD5加密接口

签名算法 app_key和app_secret由对方系统提供 MD5_CALCULATE_HASH_FOR_CHAR&#xff08;中文加密与JAVA不一致&#xff09; 代码&#xff1a; *获取传输字段名的ASCII码&#xff0c;根据ASCII码对字段名进行排序SELECT * FROM zthr0051WHERE functionid iv_functionidINTO …

想布局短视频赛道,云微客AI矩阵系统告诉你诀窍

随着人工智能技术的不断发展&#xff0c;越来越多的企业和个人创作者开始意识到智能化的重要性。而现阶段&#xff0c;随着短视频市场的膨胀扩大&#xff0c;批量成片、智能创作、定时发布是当下重要的趋势&#xff0c;企业如果想在短视频赛道分一杯羹&#xff0c;智能化的平台…

首次30米空间分辨率生成中国年度耕地栅格数据1986-2021

中国1986-2021年30米分辨率年度耕地数据集 数据介绍 精确、详细且及时的耕地范围信息对于粮食安全保障和环境可持续性至关重要。然而&#xff0c;由于农业景观的复杂性和足够训练样本的缺乏&#xff0c;在大范围下进行高时空分辨率的耕地动态监测仍然具有挑战性&#xff0c;尤其…