队列——数据结构——day5

队列

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,列在最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。

在这里插入图片描述

队列的抽象数据类型

初始化操作

初始化操作,建立一个空队列

QUEUE_LIST *CreatQueueList()
{
	QUEUE_LIST *p = malloc(sizeof(QUEUE_LIST));
	if(NULL == p)
	{
		perror("fail to malloc");
		return NULL;
	}

	p->pfront = NULL;
	p->preal = NULL;
	p->clen = 0;

	return p;
}

清空

将队列Q清空

int ClearQueue(QUEUE_LIST *plist)
{
	while(!IsEmptyOfQueue(plist))
	{
		PopHeadQueue(plist,NULL);
	}
	
	return 0;
}

销毁

若队列存在,则销毁

void DestroyQueue(QUEUE_LIST *plist)
{
	ClearQueue(plist);
	free(plist);
}

创建节点元素

创建节点元素,为插入做准备

QUEUE_NODE *CreatQueueNode(DATA_TYPE num)
{
	QUEUE_NODE *p = malloc(sizeof(QUEUE_NODE));
	if(NULL == p)
	{
		perror("fail to malloc");
		return NULL;
	}

	p->pnext = NULL;
	p->data = num;

	return p;
}

查看队列是否为空

若队列Q为空,返回0

int IsEmptyOfQueue(QUEUE_LIST *plist)
{
	return NULL == plist->pfront;
}

插入

若队列存在,插入新元素pnode到队列中并成为队尾元素。

int PushTailQueue(QUEUE_LIST *plist,QUEUE_NODE *pnode)
{
	if(IsEmptyOfQueue(plist))
	{
		plist->pfront = pnode;
		plist->preal = pnode;
		plist->clen++;
	}else
	{
		plist->preal->pnext = pnode;
		plist->preal = pnode;
		plist->clen++;
	}

	return 0;
}

删除

删除队列Q中队头元素,并用num返回其值

int PopHeadQueue(QUEUE_LIST *plist,DATA_TYPE *num)
{
	if(IsEmptyOfQueue(plist))
	{
		return -1;
	}
	
	QUEUE_NODE *p = plist->pfront;
	plist->pfront = p->pnext;

	if(plist->pfront == NULL)
	{
		plist->preal = NULL;
	}
	if(num != NULL)
	{
		*num = p->data;
	}
	free(p);
	plist->clen--;

	return 0;
}

队列长度

返回队列的元素个数

int QueueLength(QUEUE_LIST *plist)
{
	return plist->clen;
}

遍历

遍历队列中各个元素,并将其输出在终端

void ErgodicOfQueue(QUEUE_LIST *plist)
{
	QUEUE_NODE *p = plist->pfront;

	while(p)
	{
		printf("%d ",p->data);
		p = p->pnext;
	}

	putchar('\n');
}

以上就是今天的内容!

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

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

相关文章

银行数字人民币系统应用架构设计

2019年10月,01区块链联合数字资产研究院发布了《人民币3.0:中国央行数字货币运行框架与技术解析》,从数字货币界定和人民币发展历程出发,区分了央行数字货币与比特币、移动支付等的区别,全面介绍了央行数字货币的发展历…

C#,图论与图算法,有向图(Direct Graph)广度优先遍历(BFS,Breadth First Search)算法与源程序

1 图的广度优先遍历 图的广度优先遍历(或搜索)类似于树的广度优先遍历(参见本文的方法2)。这里唯一需要注意的是,与树不同,图可能包含循环,因此我们可能再次来到同一个节点。为了避免多次处理节点,我们使用布尔访问数组。为简单起见,假设所有顶点都可以从起始顶点到达…

ChatGPT智能聊天系统源码v2.7.6全开源Vue前后端+后端PHP

测试环境:Linux系统CentOS7.6、宝塔、PHP7.4、MySQL5.6,根目录public,伪静态thinkPHP,开启ssl证书 具有文章改写、广告营销文案、编程助手、办公达人、知心好友、家庭助手、出行助手、社交平台内容、视频脚本创作、AI绘画、思维导图等功能 ai通道:文心一言、MiniMax、智…

GraalVM详细安装及打包springboot、java、javafx使用教程(打包springboot2篇)

前言 在当前多元化开发环境下,Java作为一种广泛应用的编程语言,其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱,而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而&#xff…

Linux设备驱动开发 - 三色LED呼吸灯分析

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 展锐UIS7885呼吸灯介绍呼吸灯调试方法亮蓝灯亮红灯亮绿灯展锐UIS7885呼吸灯DTS配置ump9620 PMIC驱动ump9620中的LED呼吸灯驱动LED的tr…

python--容器、列表

1.python官方内置的容器 list: set: tuple: dict: 弱数据类语言通通没有数组,因为数组指的是 类型固定、大小固定、连续的内存空间。 2.链表: 非连续内存空间 python用的是双向链表 单向链表:优点:不浪费内存&#xf…

代码随想录day28(1)二叉树:二叉搜索树中的插入操作(leetcode701)

题目要求:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。 思路:对于二叉搜索树来说&…

如何使用ospf (enps) 简单实践ospf协议

1. OSPF的基本概念 OSPF(Open Shortest Path First,开放式最短路径优先)是一种广泛应用于TCP/IP网络中的内部网关协议(Interior Gateway Protocol, IGP),主要用于在同一自治系统(Autonomous Sys…

SpringBoot项目集成XXL-job

文章目录 首先引入依赖配置信息配置类定义定时任务执行方法配置任务执行器配置任务执行计划 在集成 XXL-job 前,首先确保部署了 XXL-job 的 admin 服务, 如果还没有部署的话请参照 Docker安装部署XXL-Job 将 XXL-job 部署起来. 此时, XXL-job 已经部署好了, 下来一步一步的来集…

【Python 滑块不同的操作】对滑块进行处理,列如切割、还原、去除、无脑识别距离等等

文章日期:2024.03.23 使用工具:Python 类型:图片滑块验证的处理(不限于识别距离) 使用场景:? 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理&a…

BGP4+简介

定义 BGP是一种用于自治系统AS(Autonomous System)之间的动态路由协议,常用版本是BGP-4,BGP-4只能传递IPv4路由。针对IPv6的BGP4扩展,通常称为BGP4。 目的 BGP4用于在AS之间传递路由信息,并不是所有情况…

Python爬取歌曲宝音乐:轻松下载Jay的歌

歌曲宝是一个不用付费就能听jay的歌曲,但是每次都只能播放一首不方便,于是今天想把它下载下来,本地循环播放,它所用到的接口是某我的还不错哈 获取搜索接口 分析html请求接口,获取到的数据是直接渲染好的HTML内容&…

lvs+keepalived+nginx实现高可用

主机:192.168.199.132 备机:192.168.199.133 真实服务器1:192.168.199.134 真实服务器2:192.168.199.135 问题: 防火墙没关 132配置ipvsadm进行dr模式 132配置keepalived.conf 133配置ipvsadm进行dr模式 133配置ke…

【测试开发学习历程】计算机编程语言

前言: 学习完数据库,我们便要进入到编程语言的内容当中了。 这里先对编程语言写出大致的分类, 在这之后,我们会以Python为重点, 开始测试开发为重点的编程语言学习。 目录 1 计算机编程语言的发展 2 语言的分类…

高蛋白的猫粮品牌有哪些?

亲爱的猫友们,你们是否也在寻找一款高蛋白的猫粮,希望给自家的小猫咪提供最好的营养呢?🐱 在市面上,高蛋白的猫粮品牌确实不少,但要说到真正让人信赖的,福派斯鲜肉无谷猫粮无疑是一个不错的选择…

如何自己构建 Ollama 模型

如何自己构建 Ollama 模型 0. 引言1. 下载原始模型2. 创建 Modelfile 文件3. 构建 Ollama 模型4. 运行自构建的 Ollama 模型 0. 引言 针对模型新出的大模型,可能 Ollama Models Library 不提供,或者会在今后的某个时点提供。还有可能 Ollama Models Lib…

计算机视觉之三维重建(3)---单视几何

文章目录 一、问题提出二、无穷远点、无穷远线、无穷远平面2.1 2D空间2.2 3D空间 三、影消点和影消线3.1 2D平面上的无穷远点,无穷远线变换3.2 影消点3.3 影消线 四、单视重构 一、问题提出 1. 当摄像机标定后,内部参数 K K K 已知,外部参数…

R语言逻辑回归与lasso模型

一、数据描述 数据集heart_learning.csv与heart_test.csv是关于心脏病的数据集,heart_learning.csv是训练数据集,heart_test.csv是测试数据集。 变量名称变量说明age年龄sex性别,取值1代表男性,0代表女性pain 胸痛的类型&#x…

去中心化的 AI 数据供应:认识Grass,参与Grass

去中心化的 AI 数据供应:认识Grass,参与Grass 👋:邀请链接☘️:Intro❓:看好Grass和即将推出的L2的原因有哪些?💡:展望🔍:总结 👋&…

Ubuntu 安装GPU驱动

https://www.nvidia.cn/Download/index.aspx 驱动我前面安装好啦,不做了,不过可以去看看 CUDA Toolkit 12.4 Downloads | NVIDIA Developer wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_l…