队列的结构概念和实现

文章目录

一、队列的结构和概念

什么是队列?
队列就是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出
在这里插入图片描述

如上图所示,第一个人先来,排在第一位就可以第一个走,也叫先进先出
但是想要近来就只能排队在后面等候
在这里插入图片描述

二、队列的实现

队列和栈一样都可以用链表和数组实现,但是对于队列来说,链表更好,因为用数组在对头出数据的话效率太低。
在这里插入图片描述

三、队列的实现函数

  • 1.队列的初始化
void QueueInit(Queue* pq)
{
	assert(pq);
	pq->phead = pq->ptail = NULL;
	pq->size = 0;

}
  • 2.队列的销毁
    `

void QueueDestroy(Queue* pq)
{
	assert(pq);
	QueueNode* cur = pq->phead;
	while (cur)
	{
		cur = pq->phead->next;
		free(pq->phead);
		pq->phead = cur;
	}
	
	pq->phead = pq->ptail = NULL;
	pq->size = 0;
}

链表的销毁需要一个一个节点的销毁,无法直接销毁

  • 3.队列的判空
bool QueueEmpty(Queue* pq)
{
	assert(pq);
	return pq->size == 0;
}

  • 4.队列的插入
void QueuePush(Queue* pq, QDataType x)
{
	assert(pq);
	QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		return;
	}

	newnode->val = x;
	newnode->next = NULL;
	
	if (pq->ptail)
	{
		pq->ptail->next= newnode;
		pq->ptail = newnode;
	}

	else
	{
		pq->phead = pq->ptail = newnode;
	}

	pq->size++;
}

每一个节点的开辟用malloc就行,这点与数组不一样,数组是realloc扩容

  • 5.队列的删除
void QueuePop(Queue* pq)
{
	assert(pq);
	assert(pq->phead!=NULL);

	if (pq->phead->next == NULL)
	{
		free(pq->phead);
		pq->phead = pq->ptail = NULL;
	}
	else
	{
		QueueNode* next = pq->phead->next;
		free(pq->phead);
		pq->phead = next;
	}
	pq->size--;

}

  • 6.取队列的头
QDataType QueueFront(Queue* pq)
{
	assert(pq);
	assert(pq->phead);
	
	return pq->phead->val;
	

}
  • 7.取队列的尾巴
QDataType QueueBack(Queue* pq)
{
	assert(pq);
	assert(pq->ptail);
	return pq->ptail->val;
}

  • 8.队列的长度
int QueueSize(Queue* pq)
{
	assert(pq);
	return pq->size;
}

四、队列的思维导图

在这里插入图片描述
先赞后看,养成习惯!!!^ _ ^<3 ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!

如有错误请您指正批评!

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

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

相关文章

经典文献阅读之--CamMap(基于SLAM地图对不共视相机进行外参标定)

0. 简介 由于多相机之间通常存在有限或无重叠的视场&#xff0c;因此在估计外参相机参数时面临着一定的挑战&#xff0c;为了解决这个问题&#xff0c;本文提出了CamMap&#xff1a;一种新颖的6自由度外参标定流程。根据三个操作规则&#xff0c;使一个多相机系统单独捕捉一些…

《Spring Security 简易速速上手小册》第4章 授权与角色管理(2024 最新版)

文章目录 4.1 理解授权4.1.1 基础知识详解授权的核心授权策略方法级安全动态权限检查 4.1.2 主要案例&#xff1a;基于角色的页面访问控制案例 Demo 4.1.3 拓展案例 1&#xff1a;自定义投票策略案例 Demo测试自定义投票策略 4.1.4 拓展案例 2&#xff1a;使用方法级安全进行细…

MyBatis 学习(三)之 MyBatis 全局配置文件

目录 1 MyBatis 全局配置文件 2 properties 元素 3 setting 设置 4 typeAlianses 别名处理器 5 typeHandler 类型处理器 6 objectFacotry 对象工厂&#xff08;了解&#xff09; 7 plugins 插件&#xff08;了解&#xff09; 8 environments 运行环境 9 databaseIdPro…

cpp基础学习笔记03:类型转换

static_cast 静态转换 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指针或引用转换成基类的指针或者引用表示)是安全的&#xff1b;down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。用于基本数据类型之间的转换&#xff…

ORACLE 基础

一.ORACLE简介 1.1什么是oracle ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。…

[HackMyVM]靶场 Adria

kali:192.168.56.104 主机发现 arp-scan -l 靶机:192.168.56.108 端口扫描 nmap -p- 192.168.56.108 开启了 22 80 139 445端口 进入web 编辑 /etc/hosts&#xff0c;把192.168.56.108 adria.hmv添加进去重新访问 里面没什么有用的东西&#xff0c;注册需要邮箱&#xff0c;…

在线ai写作,让你随时随地创作优质内容

如今的ai技术已经渗透到我们生活的方方面面。其中&#xff0c;AI写作成为了一个备受关注的领域。如今&#xff0c;我们可以利用在线ai写作在任何时间、任何地点创作出优质的内容。 传统的写作过程需要大量的时间和精力。从构思到写作再到修改&#xff0c;每一个环节都需要我们投…

kotlin单例模式,4年小Android的心路历程

一、Java基础 我知道大家一定有很久都没有注意到这个点了&#xff0c;平时的工作应该也很少涉及到这些底层知识吧&#xff0c;但是这些东西很重要。如果是想要跳槽加薪或者是应对即将到来的面试&#xff0c;这些都是不可忽视的知识。 在这一点里&#xff0c;需要重视的点有&am…

常见查找算法Java实现

顺序&#xff08;线性&#xff09;查找二分查找/折半查找插值查找斐波那契查找 线性查找 判断数列是否包含要求&#xff0c;如果找到了&#xff0c;就提示找到了&#xff0c;并给出下标值 // 线性查找 public static ArrayList<Integer> seqSearch(int[] arr, int value…

Windows 10 合并磁盘分区 (G and H)

Windows 10 合并磁盘分区 [G and H] 1. 设备和驱动器2. 计算机 -> 管理 -> 存储 -> 磁盘管理3. 删除卷4. 新建简单卷5. 设备和驱动器References 1. 设备和驱动器 2. 计算机 -> 管理 -> 存储 -> 磁盘管理 3. 删除卷 H: -> right-click -> 删除卷 H: 变…

项目案例:图像分类技术在直播电商中的应用与实践

一、引言 在数字化浪潮的推动下&#xff0c;电商行业迎来了一场革命性的变革。直播电商&#xff0c;作为一种新兴的购物模式&#xff0c;正以其独特的互动性和娱乐性&#xff0c;重塑着消费者的购物习惯。通过实时的直播展示&#xff0c;商品的细节得以清晰呈现&#xff0c;而互…

小红书关键词爬虫

标题 1 统计要收集的关键词&#xff0c;制作一个文件夹2 爬取每一页的内容3 爬取标题和内容4 如果内容可以被查看&#xff0c;爬取评论内容5 将结果进行汇总&#xff0c;并且每个帖子保存为一个json文件&#xff0c;具体内容6 总结 1 统计要收集的关键词&#xff0c;制作一个文…

Linux时间同步(PPS、PTP、chrony)分析笔记

1 PPS(pulse per second) 1.1 简介 LinuxPPS provides a programming interface (API) to define in the system several PPS sources. PPS means "pulse per second" and a PPS source is just a device which provides a high precision signal each second so t…

靠谱的车【华为OD机试-JAVAPythonC++JS】

题目描述 程序员小明打了一辆出租车去上班。出于职业敏感&#xff0c;他注意到这辆出租车的计费表有点问题&#xff0c;总是偏大。 出租车司机解释说他不喜欢数字4&#xff0c;所以改装了计费表&#xff0c;任何数字位置遇到数字4就直接跳过&#xff0c;其余功能都正常。 比如&…

外汇天眼:ASIC 获得针对前 Blockchain Global 董事的临时出行限制令

澳大利亚证券与投资委员会&#xff08;ASIC&#xff09;已经针对前Blockchain Global Limited&#xff08;清算中&#xff09;董事梁国&#xff08;又名Allan Guo&#xff09;获得了临时旅行限制令。这些命令在其他方面&#xff0c;阻止郭先生在2024年8月20日或进一步命令之前离…

C++数据结构与算法——二叉搜索树的属性

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

C++数据结构与算法——二叉树的属性

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

机器学习项目外包注意事项

将机器学习项目外包给外部团队或合作伙伴是一种常见的做法&#xff0c;特别是当您的团队缺乏特定领域的专业知识或资源时。以下是一些关于机器学习项目外包的要点和注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#…

【Unity】使用Unity实现双屏显示

引言 在使用Unity的时候&#xff0c;有时候会需要使用双屏显示 简单来说就是需要在两个显示器中显示游戏画面 双屏显示注意点&#xff1a; ①双屏显示需要电脑有两个显示 ②双屏显示只能用于PC端 ③不仅仅可以双屏&#xff0c;Unity最大支持8屏显示 1.相机设置 ①我们打开Un…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护&#xff1a; 查看ida&#xff1a; 这边其实看反汇编没啥大作用&#xff0c;需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题&#xff1a; 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码&#xff0c;然后让我们输入密码&#xff0c;用st…