数据结构第四课 -----线性表之队列

news2024/11/18 1:48:20

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


队列

  • **作者前言**
  • 队列的定义
  • 队列的设计
    • 队列的结构
    • 初始化
    • 插入(入队)
    • 删除(出队)
    • 队头
    • 队尾
    • 判断队列是否为空
    • 队列的长度
  • 总结

队列的定义

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

在这里插入图片描述
就相当于我们现实的排队一样
队列的实现方法:
1.数组队列
在这里插入图片描述
2. 链表队列
双向链表
在这里插入图片描述
两边没有太多规定
单向链表
在这里插入图片描述
下面我就用单链表来演示下

队列的设计

队列的结构

在这里插入图片描述

typedef int QDataType;
typedef struct QueueNode
{
	QDataType val;
	struct QueueNode* next;
}QNode;
typedef struct Queue
{
	QNode* head;
	QNode* tail;//尾节点和队尾
	int size;
} Queue;

这里有两个结构体,一个是链表节点的结构体,一个是队列的结构,这样设计可以在计算队列长度时的时间复杂度变成O(1),还要方便传参时不用频繁调用二级指针

初始化

void QueueInit(Queue* pq)
{
	assert(pq);
	pq->size = 0;
	pq->head = NULL;
	pq->tail = NULL;
}

插入(入队)

//插入
void QueuePush(Queue* pq, QDataType elemest)
{
	//创建节点
	QNode* newnode = (QNode*)malloc(sizeof(QNode));
	if (newnode == NULL)
	{
		perror("malloc");
		return;
	}
	newnode->next = NULL;
	newnode->val = elemest;
	if (pq->tail == NULL)
	{
		pq->head = newnode;
		pq->tail = newnode;
	}
	else
	{
		pq->tail->next = newnode;
		pq->tail = newnode;
	}
	pq->size++;
}

我们这里是没有使用哨兵位,所以要判断head为空的情况下

删除(出队)

//删除
void QueuePop(Queue* pq)
{
	assert(pq);
	assert(pq->head);
	if (pq->head == pq->tail)
	{
		free(pq->head);
		pq->tail = NULL;
		pq->head = NULL;
	}
	else
	{
		QNode* node = pq->head;
		pq->head = pq->head->next;
		free(node);
	}
	pq->size--;

}

使用这种思路我们要注意head不能为空,还有就是只有一个节点的时候
在这里插入图片描述
一旦freel(head),tail就成了野指针了

队头

//队头
QDataType QueueFront(Queue* pq)
{
	assert(pq);
	assert(pq->head);
	return pq->head->val;
}

队尾

//队尾
QDataType QueueBack(Queue* pq)
{
	assert(pq);
	assert(pq->head);
	return pq->tail->val;
}

判断队列是否为空

//是否为空
bool QueueEmtry(Queue* pq)
{
	assert(pq);
	return pq->size == 0;
}

队列的长度

//长度
int QueueSize(Queue* pq)
{
	assert(pq);
	return pq->size;
}

总结

队列的大概简单的设计,如果想要设计数组队列可以去尝试一下

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

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

相关文章

高性能架构设计

1. 引言 高性能架构设计在现代系统中至关重要,它能够应对大规模的数据和用户需求增长,提供优秀的用户体验和实时数据处理能力。同时,它也是解决"三高"问题(高并发、高性能、高可用性)的关键。 2. 高性能定…

三维模型的顶层合并构建的点云抽稀关键技术分析

三维模型的顶层合并构建的点云抽稀关键技术分析 倾斜摄影超大场景的三维模型的顶层合并通常会生成大量的点云数据,这对于后续处理和应用可能会带来一些挑战。为了减少数据存储和处理的复杂性,可以采用点云抽稀处理技术来降低点云密度和数据量。本文将对几…

weblogic多机集群节点管理服务配置

1.安装启动管理端控制台略过了,登录到控制台, 2.创建集群,配置信息如图,基本默认就行,点完成。点击集群名称,添加服务器 前两个是管理机上的两个服务,后面是另个一个机器的两个节点服务&#…

sql查询结果跟in传入参数顺序一致

Orcle、postgresql、td-sql中可以使用如下语句 select namefrom tbl_user_infowhere id in (4,3,1)order by instr(4,3,1,id);查询结果:

node将package.json中的包降为低版本或者升级为高版本

前言 比如现在你用某个包的当前版本,但是你安装的版本高了,那么你应该这么做 1.首先删除node项目中的node_modules目录,防止安装时的包不一致 如果没安装就忽略 例如将package.json中的view-design包降为^4.6.1,当前view-design的版本为^4.…

基于Gin+Gorm框架搭建MVC模式的Go语言企业级后端系统

文/朱季谦 环境准备:安装Gin与Gorm 本文搭建准备环境:GinGormMySql。 Gin是Go语言的一套WEB框架,在学习一种陌生语言的陌生框架,最好的方式,就是用我们熟悉的思维去学。作为一名后端Java开发,在最初入门…

优思学院|一文快速看懂TRIZ原理

在创新领域,TRIZ被翻译为发明问题的解决理论。TRIZ理论深刻揭示了创造发明的内在规律和原理,专注于澄清和强调系统中存在的矛盾,旨在完全解决这些矛盾,实现最终的理想解决方案。实践证明,运用TRIZ理论不仅能够极大地加…

BUUCTF 面具下的flag 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,得到一张.jpg图片。 密文: 解题思路: 1、将图片放到Kali中,使用binwalk检测出隐藏zip包。 使用foremost提取zip压缩包到output目录下 解压zip压缩包&…

Linux Ubuntu系统中添加磁盘

在学习与训练linux系统的磁盘概念、文件系统等,需要增加磁盘、扩展现有磁盘容量等,对于如何添加新的磁盘,我们在“Linux centos系统中添加磁盘”中对centos7/8版本中如何添加、查看、删除等,作了介绍,而对Ubuntu版本中…

OpenELA 正式公开 Enterprise Linux 源代码

导读近日消息,在红帽(Red Hat)宣布不再对外公开 Red Hat Enterprise Linux(RHEL)源代码之后,同属 Linux 领域的甲骨文、SUSE 及 CIQ 宣布成立了 Open Enterprise Linux Association(OpenELA&…

Linux 图形界面配置RAID

目录 RAID 1 配置 RAID 5配置 , RAID 配置起来要比 LVM 方便,因为它不像 LVM 那样分了物理卷、卷组和逻辑卷三层,而且每层都需要配置。我们在图形安装界面中配置 RAID 1和 RAID 5,先来看看 RAID 1 的配置方法。 RAID 1 配置 配置 RAID 1…

【双指针】:Leetcode283.移动零

朋友们、伙计们,我们又见面了,本专栏是关于各种算法的解析,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结构专栏&…

【python】—— 内置类型、运算符、表达式、关键字

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

【管理运筹学】运筹学“背诵手册”(二) | 对偶理论与灵敏度分析

二、对偶理论与灵敏度分析 用矩阵形式表示原问题和对偶问题: max ⁡ z C X s . t . { A X ≤ b X ≥ 0 \max z\pmb{CX}\\ s.t.\begin{cases} \pmb{AX\leq b} \\ \pmb{X}\geq\pmb{0} \end{cases} maxzCXs.t.{AX≤bX≥0​ 其中 C ( c 1 , c 2 , ⋯ , c n ) , X (…

【广州华锐互动】消防科普VR实训展馆增强群众学习兴趣和沉浸感

在现代社会,科技的发展已经深入到我们生活的各个角落,其中包括教育和信息传播领域。3D技术的引入为科普教育提供了全新的可能性。特别是在消防安全教育中,消防科普VR实训展馆的应用,不仅可以提高公众的消防安全意识,还…

HCIA-经典综合实验(二)

经典综合实验(二) 实验拓扑配置步骤配置Eth-Trunk聚合链路第一步 配置二层VLAN第二步 配置MSTP生成树第三步 配置相关IP地址第四步 配置DHCP及DHCP中继第五步 配置三层的网关冗余协议 VRRP及OSPF第六步 配置静态路由,NAT地址转换及其他配置完善 配置验证…

【Regulatory Genomics】Part2 BPNet、DeepLIFT

文章目录 Deep learning at base-resolution reveals cis-regulatory motif syntaxproblemBPNet: predicting base-resolution profiles from DNA sequenceInterpreting the predictions of BPNet1 DeepLIFT2 TF-MoDISCO3 motif syntax derived TF cooperativity Experimental …

Visual Studio Code安装和设置中文

文章目录 Visual Studio Code安装Visual Studio Code设置中文 步骤如下: Visual Studio Code安装 1.下载安装包 VS Code的官网 下载链接中的“az764295.vo.msecnd.net” 替换为国内镜像地址“vscode.cdn.azure.cn”,下载速度直接飙升至几十 Mb/s。(在官网下载速度…

Elasticsearch 之聚合分析

本文主要介绍 Elasticsearch 的聚合功能,介绍什么是 Bucket 和 Metric 聚合,以及如何实现嵌套的聚合。 首先来看下聚合(Aggregation): 1 什么是 Aggregation? 首先举一个生活中的例子,这个是京…