数据结构之队列

【数据结构】队列(顺序队列、循环队列、链队列) 文章目录 前言 一、队列的定义 二、队列的顺序存储结构 1.顺序队列的定义 2.循环队列定义 3.循环队列的基本操作 三、队列的链式存储结构 1.链队列的定义 2.链队列的基本操作 前言 队列也是一种线性表,其特殊性在于队列的基本操作是线性表的子集。队列按“先进先出”的规则进行操作,故称其为操作受限的线性表。 一、队列的定义 队列(queue)是只允许在一端进行插入操作,在另一端进行删除操作的线性表,简称“队”。 队列是一种先进先出(First In First Out)的 阅读详情

队列的概念

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表

两种队列的实现

1.静态队列

利用一个定长数组作为队列的存储空间,确定一个指向开头数据下标的变量head以及一个指向最后一个数据的下表的tail
操作中

入队时:如果队列中仍然有存储空间tail加一将数据插入队列尾部,如果tail大于数组长度MAX_SIZE-1则将tail指向0

出队时:如果队列不为空则将head下表指向的数据返回,并将head加一,如果head大于MAX_SIZE-1则将head指向0

数据结构:

typedef struct ls//数组实现的静态队列
{
	int buffer[MAX_SIZE];
	int head = 0;//头指针
	int tear = -1;//尾部指针
	int count = 0;//元素个数
}Queue;
count用于计数,这样不在需要计算队列中含有元素的个数了


进队列操作:

bool EnQueue(Queue* Qu,int date)//静态队列入
{
	if (Qu->count > MAX_SIZE)return 0;//数据满了返回0
	if (++Qu->tear > MAX_SIZE - 1)Qu->tear = 0;//尾部溢出则指向头部
	Qu->buffer[Qu->tear] = date;
	Qu->count++;
	return	1;
}

count大于MAX_SIZE则表示队列中已经没有多余的存储空间了 返回0


出队列操作:

bool DeQueue(Queue* Qu, int *date)//静态队列出
{
	if (Qu->count == 0)return 0;//空队列返回0
	if (++Qu->head > MAX_SIZE - 1)Qu->head = 0;
	Qu->count--;
	return 1;
}

count=0时则表示该队列为空,返回0


总结:该方式下入队和出队均不涉及循环所以时间复杂度为O(1)但是内存空间分配非常不灵活,可能出现浪费或者不够用的情况,所以为了解决这种情况下的问题,使用后一种队列形式:链队列。

2.链队列

链队列利用线性链表的特点,可以实现动态增加或者减少队列占用的内存,使内存的分配更加灵活。
需要一个指向队列头部的指针head和指向尾部的指针tear,初始化时将这两个指针初始化为NULL
进队列时:如果此时队列为空则为头指针分配存储空间并将值赋值给该空间,尾部指针指向头部指针
    如果此时队列部位空则在尾部指针next指针后面分配存储空间,存储进队列的值,尾部指针tear再指向原tear->next
出队列时:如果此时队列为空即lenth=0返回0
    lenth!=0则返回头指针指向的数据,释放该存储空间,头指针指向原head->next

数据结构

typedef struct item
{
	int data = 0;
	item*next = NULL;
}LinkNode,*NodePtr;

typedef struct elem//需要队列头和队列尾部
{
	NodePtr head = NULL;
	NodePtr tear = NULL;
	int lenth = 0;//队列长度
}LinkQueue;
LinkNode为链表节点
next指针需要初始化为空
LinkQueue为链队列
头指针和尾部指针均需要初始化为空

进队列操作

bool EnQueue(LinkQueue* Qu,int date)//入队列
{
	NodePtr e = (NodePtr)malloc(sizeof(LinkNode));
	e->data = date;
	e->next = NULL;
	if (Qu->tear == NULL)//如果队列为空 也可以判断lenth
	{
		Qu->head = e;
		Qu->tear = e;
		Qu->lenth = 1;
	}
	else
	{
		Qu->tear->next = e;
		Qu->tear = e;
		Qu->lenth++;//长度自加一位
	}
	return 1;
}

操作方法入上所述


出队列操作

bool DeQueue(LinkQueue*Qu, int*date)//出队列
{
	if (Qu->lenth == 0)return 0;//空队列
	NodePtr temp = Qu->head;
	*date = temp->data;
	if (Qu->head == Qu->tear)//也可以判断lenth为0
	{
		Qu->head = NULL;
		Qu->tear = NULL;
	}
	else
	{
		Qu->head = Qu->head->next;
	}
	Qu->lenth--;
	free(temp);
	return 1;
}

总结:这种数据结构可以更为灵活分配内存,只要系统还有剩余内存就可以再往里面添加数据,进队列和出队列与静态队列一样不涉及到循环所以时间复杂度仍然是O(1)

数据结构学习:队列 数据结构与算法学习:队列 阅读详情

相关推荐

【数据结构】——队列

队列(Queue)的抽象数据结构类型 //基本操作: InitQueue (&Q) //构造一个空队列Q。 //以下前提条件为队列已经存在 Des t royQueue (&Q) //队列Q被销毁, 不再存在。 ClearQueue (&Q) //将Q清为空队列。 QueueEmpty (Q) //若Q为空队列,则返回true, 否则返回false。 QueueLength(Q) //返回Q的元素个数,即队列的长度。 EnQueue (&Q, e} //

m0_65759588的博客 2754

数据结构——队列——一篇就够了

文章目录队列队列的概念及结构队列的实现 队列 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 队列的实现 队列可以数组也可以链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低(如果数组要出数据,那么就要挪动数据)。 ...

weixin_58004346的博客 1024

CH592F RISC-V蓝牙LED灯设计:WS2812B驱动与微信小程序控制

蓝牙低功耗(BLE)是嵌入式物联网设备主流无线通信技术,其核心在于协议栈轻量化、射频稳定性与外设协同调度。基于RISC-V内核的蓝牙SoC(如CH592F)凭借高集成度、低待机电流和免外部巴伦的射频设计,显著降低硬件复杂度与BOM成本;而WS2812B作为单线级联RGB LED,依赖微秒级精准时序,需借助定时器+DMA机制规避CPU干预,保障动态效果流畅性。该方案融合电容触摸交互、GATT服务自定义与微信小程序标准Bluetooth API对接,适用于智能照明、DIY彩灯及教学实践等场景,是BLE+LED实

weixin_31163455的博客 433

【数据结构】队列

/存放队中元素//队首和队尾指针} SqQueue;//顺序队类型因为队列两端都在变化,所以需要两个“指针”来标识队列的状态采用链表存储的队列称为链队,这里采用不带头结点的单链表实现。

2301_80031203的博客 2358

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 1934

ESP32C3的I2S接口详解:以驱动PCM5102A为例,避开时序与配置的那些坑

本文深入解析ESP32C3的I2S接口驱动PCM5102A DAC的完整解决方案,涵盖时序对齐、PCB优化和寄存器级配置。通过实际案例分享时钟树分析、信号完整性设计和底层调试技巧,帮助开发者避开常见陷阱,实现高质量音频输出。重点探讨了I2S协议栈、电源滤波优化及DMA传输异常处理等关键技术要点。

weixin_30254435的博客 298

数据结构——顺序队列【c语言版】

队列(quque)简称队,只允许在表的一端输入,在表的另一端删除(操作受限制的线性表), 把进行插入的一段叫做队尾(表尾),把进入删除的一端叫做队首或队头(表头)。 队列最主要的特点:先进先出,FIFO(first in first out) 队列有其实有三种:顺序队列、循环队列、链式队列 下面是采用采用顺序存储结构来实现的顺序队 假设栈的元素个数最大不超过正整数MaxSize,所以元素具有同一数据类型(ElemType),用下来方式来声明顺序栈的类型SqQueu...

clear-ninghongkang的博客 4826

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

数据结构-队列

目录 队列的概述 队列的顺序存储结构 部分算法分析 循环队列的表示和实现 global.h LoopQueue.h LoopQueueTest.cpp 运行结果 队列的概述 队列是一种重要的线性结构,同栈一样,属于一种操作受限的线性表 队列(queue),只允许在表的一端进行插入操作,而在另一端进行删除操作 队列允许插入的一端叫做队尾(rear),允许删除的一端叫做队头(front) 队列元素遵循先进先出,即最先进入队列的元素最先出队列 队列的顺...

初始化的博客 2999

优快云 付费专栏连载第 3 篇|Cadence Allegro 8 层板布局实战教程:RK3568 硬件模块化分区布局,DDR4 内存约束区域设置、布局禁忌避坑指南

本文是 RK3568 8 层板高速 PCB 设计实战专栏的第 3 篇,聚焦 DDR4 布局阶段的核心方法论与 Allegro 实操。文章从布局前 6 项前置检查清单入手,系统讲解模块化分区布局的五大黄金原则,并给出 160mm×100mm 样板的 5 大功能分区实战案例。随后以图文步骤演示如何在 Allegro 中创建 ROOM_DDR4 与 ROOM_CPU 约束区域,并强调 Hard Room 硬约束的强制校验作用。

weixin_44520581的博客 1732

uniApp微信小程序:error: 60001 request:fail errcode:-101 cronet error code:-101error_msg:net::ERR CONNECTI

uni-app微信小程序域名访问报error 60001 request:fail errcode:-101,解决Uniapp微信小程序报600001错误,uni.request()接口请求报错,服务器更换SSL证书后,uniapp微信小程序出现`request:fail errcode:-101`问题分析与解决,服务器更换ssl证书后,手机访问微信小程序异常,微信小程序更换SSL证书后出现请求报错,服务器更换SSL证书,微信小程序报600001,小程序反应偶尔出现request:fail errcode:

✅ 精选推荐文章 4581

有趣的数据结构算法13——队列的初始化、入队与出队

有趣的数据结构算法13——队列的初始化、入队与出队什么是队列队列的初始化入队出队实现代码GITHUB下载连接 前两天出去玩了,过两天又可以去旅游了,回来还是要好好学习呀!新的结构又要出现了。我心里有点害怕,但是! 什么是队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作...

Bubbliiiing的学习小课堂 1万+

YOLO11涨点优化:创新多尺度卷积注意力(MSCA)模块,小目标检测神器!

MSCA模块通过创新的多尺度设计,在保持计算效率的同时显著提升小目标检测能力。实验证明,在YOLOv5/v8等模型上嵌入MSCA后,mAP提升超过2%,小目标检测精度提升近4%,且计算代价增加极小。注意力机制的未来发展方向动态核尺寸:根据输入特征自适应调整卷积核大小跨模态融合:结合RGB与深度/热力图等多模态信息自监督优化:利用对比学习预训练注意力模块尝试在你的YOLO模型中插入MSCA模块,欢迎在评论区分享你的涨点结果!参考文献。

QQ_778132974的博客 470

数据结构——队列

在计算机科学中,数据结构(data structure)是一种数据组织、管理和存储的格式。它是相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术相关。数据结构研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系。它包含三个方面的内容:即数据的逻辑结构、数据的存储结构和数据的操作,只有这三个方面的内容完全相同,才能成为完全相同的数据结构。

2302_80243065的博客 1373

052、联发科Imagiq HyperEngine架构适配:天玑9000/9200的ISP多核并行调度与Tuning Toolkit调优案例

摘要: 项目组在适配联发科天玑9200的Imagiq 890 ISP架构时,遇到多摄预览功耗过高、帧率不稳等问题。通过分析多核调度机制,调整辅核QoS通道、优化AI-ISP协同模式(采用FREERUN+运动补偿),并利用Tuning Toolkit的Pipeline Viewer动态分配负载,最终降低功耗30mA、提升画质。关键经验包括:避免多核带宽冲突、合理配置动态时钟策略,以及统一校准参数版本管理。天玑9000/9200的HyperEngine架构需优先理解多核协同逻辑,再针对性调优,否则易引发场景兼容

zzfmlxs的博客 36

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数据结构——队列的详解

队列和栈相反,队列(queue)是一种先进先出(FIFO:first in first out)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。队列和我们日常生活中的排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一端叫队尾(tear),允许删除的一端称为队头(front)

晴空๓ 5635

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【队列】数据结构队列的实现

队列的实现

m0_56069910的博客 1139

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【数据结构】—— 队列

队列的链式存储结构,队列的顺序存储结构(循环队列)

ElvInR的博客 3010

【数据结构之队列系列】队列详解

前面我们学习了一种数据结构:栈,栈是一种只允许在一端尽进行插入删除的数据结构,而今天我们将学习另一种数据结构:队列,队列是一种支持在一端进行插入,在另一端进行删除的数据结构。

胡坚涛的博客 4266

数据结构之队列详解

数据结构之队列详解 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录数据结构之队列详解前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内

艾小方的博客 2032
上一篇: 数据结构之栈
下一篇: C#实现贪吃蛇
shu_8708
博客等级 码龄10年 45粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值