数据结构(c):队列

目录

🍺0.前言

1.什么是队列

2. 队列的实现

2.1定义队列节点

2.2定义队列

2.3队尾入队列

2.4判断队列是否为空

2.5队头出队列

2.6 队列首元素

2.7队尾元素

2.8队列内的元素个数

2.9销毁队列

3.试运行

💎4.结束语


🍺0.前言

        言C之言,聊C之识,以C会友,共向远方。各位博友的各位你们好啊,这里是持续分享数据结构知识的小赵同学,今天要分享的数据结构知识是队列,在这一章,小赵将会向大家展开聊聊队列。✊

1.什么是队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出
队列:进行插入操作的一端称为队尾
出队列:进行删除操作的一端称为队头

队列图片

其实上面说了很多,但其实队列很简单,正如它的名字一样,队列就是排队。

总结一下规律就是先进先出,就跟我们排队一样,谁排第一,谁的请求就可以先被执行。 

 

2. 队列的实现

那么队列该怎么实现呢,其实也就前面两个方式,一个数组,一个链表,这里小赵并不推荐用数组,因为如果我们用数组的话,一直出头元素,会让我们很难确定这个时候我们的对头在哪里。所以这里小赵更推荐使用链表,因为链表可以使用我们的next的指针去找到下一个头。

 

2.1定义队列节点

typedef int	QDataType;
//创建一个节点
typedef struct QNode
{
	QDataType data;
	struct QNode* next;
}QNode;
//队列
typedef struct Queue
{
	QNode* front;//队头
	QNode* rear;//队尾
	int capacity;//队列中的元素
}Queue;

2.2定义队列

//定义队列
void Queueinit(Queue*Qhead)
{
	Qhead->front=NULL;
	Qhead->rear = Qhead->front;
	Qhead->capacity = 0;
}

2.3队尾入队列

//队尾入队列
void  QueuePush(Queue* q, QDataType data)
{
	QNode*newnode= (QNode*)malloc(sizeof(QNode));//创建一个新节点
	newnode->next = NULL;
	newnode->data = data;
	if (q->front == NULL)//如果队列里面没有元素
	{
		q->front = newnode;
		q->front->next = NULL;
		q->rear = q->front;//队尾和队首在一个位置
	}
	else
	{
		q->rear->next = newnode;
		q->rear = newnode;//移动duiwei
	}
	q->capacity++;//数量+1
}

2.4判断队列是否为空

int QueueEmpty(Queue* q)
{
	return q->capacity == 0;//如果为空返回非零,不为空返回零
}

2.5队头出队列

void QueuePop(Queue* q)
{
	if (QueueEmpty(q))  return;//如果为空就返回
	QNode* node = q->front;//保留头节点
	if (q->front->next == NULL)//如果只有一个数
	{
		q->front = NULL;
		q->rear = NULL;
	}
	else
	{
		q->front = q->front->next;//移动队首
	}
	free(node);//释放原队首
	node = NULL;
	q->capacity--;
}

2.6 队列首元素

QDataType QueueFront(Queue* q)
{
	if (QueueEmpty(q))  return;//如果为空就返回
	return q->front->data;
}

2.7队尾元素

QDataType QueueBack(Queue* q)
{
	if (QueueEmpty(q))return;
	return q->rear->data;
}

2.8队列内的元素个数

int QueueSize(Queue* q)
{
	return q->capacity;
}

2.9销毁队列

void QueueDestroy(Queue* q)
{
	while (q->front)//遍历队列
	{
		QNode* node = q->front;
		q->front = q->front->next;
		free(node);
		node = NULL;
	}
	q->rear = NULL;
	free(q);//要出去后手动制空
}

3.试运行

💎4.结束语

好了小赵今天的分享就到这里了,如果大家有什么不明白的地方可以在小赵的下方留言哦,同时如果小赵的博客中有什么地方不对也希望得到大家的指点,谢谢各位家人们的支持。你们的支持是小赵创作的动力,加油。

如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持小赵,如有不足还请指点,小赵及时改正,感谢大家支持!!!

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

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

相关文章

[笔记] Win11 Microsoft Store App 离线下载

微软应用商店无法下载或下载缓慢解决方法 在一些环境下 Microsoft Store 下载速度缓慢,或者需要账号登录才能安装的场景,可以通过找到对应的离线安装包的形式进行安装。 Micorsoft Store 中的离线安装包一般后缀为 AppxBundle 和 Appx。以 Ubuntu 为例…

(四)JSP教程——request内置对象

request对象是将客户端浏览器数据提交给服务器端JSP页面的唯一数据通道,通过该通道JSP页面能够获取浏览器信息、form表单信息、URL参数信息等。 1.from表单向JSP文件传递数据 form表单是浏览器向服务器传递数据的一种基本机制,包含两种方式:…

智慧校园功平台能结构

高等教育信息化是促进高等教育改革创新和提高质量的有效途径,是教育信息化发展的创新前沿。进一步加强基础设施和信息资源建设,重点推进信息技术与高等教育的深度融合,能促进教育内容、教学手段和方法现代化,创新人才培养、科研组…

卷价格不如卷工艺降本增效狠抓模块规范化设计

俗话说,“卷价格不如卷工艺”,这意味着在追求成本控制和效率提升的过程中,蓝鹏的领导认为蓝鹏应该更注重工艺的优化和创新,而不仅仅是价格的竞争。而模块规范化设计正是实现这一目标的有效途径。 模块规范化设计可以提高生产效率…

推荐网站(5)Pika文字生成视频,ai视频创作

今天推荐一个网站,Pika文字生成视频,通过问题描述,帮我们生成对应的视频,非常的实用。 比如输入:一只小狗在河边洗澡 当然我们还可以在生成的视频上编辑 点击编辑后出来一些属性,可以修改区域&#xff0c…

TitanIDE安装常见问题解答

在软件开发和编程的世界里,集成开发环境(IDE)扮演着至关重要的角色。TitanIDE作为一款功能强大的开发工具,深受广大开发者的喜爱。然而,在安装和使用TitanIDE的过程中,开发者们往往会遇到一些问题和挑战。针…

cmake进阶:目录属性之 INCLUDE_DIRECTORIES说明一

一. 简介 前一篇文章学习了 cmake的一些目录属性,其中最重要的是 头文件搜索路径。文章如下: cmake进阶:目录属性说明一-CSDN博客 本文主要学习 一个目录属性 INCLUDE_DIRECTORIES,即头文件搜索路径。 二. cmake进阶&#xff1…

doris经典bug

在部署完登录web页面查看的时候会发现只有一个节点可以读取信息剩余的节点什么也没读取到 在发现问题后,我们去对应的节点去看log日志,发现它自己绑定到前端的地址上了 现在我们已经发现问题了,以下就开始解决问题 重置doris 首先对be进行操…

基于springboot+vue+Mysql的教师人事档案管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

在Java中如何有效地处理内存泄露

在Java中,处理内存泄露有多种方法,以下是其中三种常见的方法及其原理和适用场景: ## 1. 合理使用垃圾回收机制 Java中的垃圾回收机制(Garbage Collection,GC)是一种自动化的内存管理技术,它可以…

酸奶(科普)

酸奶(yogurt)是一种酸甜口味的牛奶饮品,是以牛奶为原料,经过巴氏杀菌后再向牛奶中添加有益菌(发酵剂),经发酵后,再冷却灌装的一种牛奶制品。市场上酸奶制品多以凝固型、搅拌型和添加…

ENVI下实现遥感矿物蚀变信息提取

蚀变岩石是在热液作用影响下,使矿物成分、化学成分、结构、构造等发生变化的岩石。由于它们经常见于热液矿床的周围,因此被称为蚀变围岩,蚀变围岩是一种重要的找矿标志。利用围岩蚀变现象作为找矿标志已有数百年历史,发现的大型金…

Meta最新研究: Flash Attention 为何是系统性能瓶颈?

I. 引言 随着机器学习趋向于更大和更复杂的模型,模型训练过程变得越来越计算和资源密集。生成式AI的出现进一步推动了模型开发的边界,大型语言模型(LLMs)通常在数百或数千个GPU上训练数月。以LLaMA2的70-B参数模型为例,需要1,720,320 GPU小时来训练。对于如此长的训练作业,训练…

一键解密,网络安全神器现已问世!

一、简介 当前版本V1.1这款工具是一款功能强大的网络安全综合工具,旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能,包括解密、分析、扫描、溯源等,为用户提供了便捷的操作界面和丰富的功…

Python基础详解二

一,函数 函数是组织好的,可重复使用的,用来实现某个功能的代码段 def myMethod(data):print("数据长度为",len(data))myMethod("dsdsdsds") 函数的定义: def 函数名(传入参数):函数体return 返回值 def m…

DS高阶:图论算法经典应用

一、最小生成树(无向图) 在了解最小生成树算法之前,我们首先要先了解以下的准则: 连通图中的每一棵生成树,都是原图的一个极大无环子图,即:从其中删去任何一条边,生成树就不在连通&a…

3D相机及应用

无论是2D相机和3D相机,在工业应用中都有着不可或缺的作用。3D相机与2D相机的最大区别在于,3D相机可以获取真实世界尺度下的3D信息,而2D相机只能获取像素尺度下的2D平面图像信息。通过3D相机得到的数据,我们可以还原出被测量物体的…

1-2 ARM单片机GPIO

def:通用输入输出口 GPIO输出模式原理讲解 1:推挽输出 2:复用推挽输出 电流最大是20mA,对于单片机来说总体的输出是由范围的 开漏/复用开漏输出 外部接上拉电阻的开漏输出 线与的概念 注: 与的概念:全1为1&…

基于FPGA的数字电子钟VHDL代码Quartus仿真

名称:基于FPGA的数字电子钟VHDL代码Quartus仿真(文末获取) 软件:Quartus 语言:VHDL 代码功能: 数字电子钟 1)设计一个能显示秒、分、时的24小时数字钟 2)用数码管显示出时,分,…

k8s ReplicaSet

ReplicaSet 是替代 ReplicationController 的,ReplicaSet 的行为与 ReplicationController 完全相同, 但pod 选择器的表达能力更强。 ReplicaSet 和 ReplicationController 的区别: ReplicationController 的标签选择器只允许包含某个标签的…