数据结构3.7--循环队列

数据结构——循环队列详解 队列主要有顺序队列,循环队列,双端队列,优先队列。而当中循环队列是一种线性数据结构。它也被称为“环形缓冲器”。它只允许在一端进行插入操作,即队尾(rear),而在另一端进行删除操作,即队头 (front),其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。向队列中插入新的数据元素称为入队,新入队的元素就成为了队列的队尾元素。循环队列允许元素在队尾插入,在队头删除,同时遵循先进先出原则。由于循环队列是基于数组实现的,所以它的访问速度很快,特别是在移动元素时。 阅读详情

1.循环队列代码实现

代码如下(示例):

#include <stdio.h>
#include <stdlib.h>

#define TOTAL_SPACE 5

typedef struct CircleIntQueue {
	int data[TOTAL_SPACE];

	int front;

	int rear;
}*CircleIntQueuePtr;

CircleIntQueuePtr initQueue() {
	CircleIntQueuePtr resultPtr = (CircleIntQueuePtr)malloc(sizeof(struct CircleIntQueue));
	resultPtr->front = 0;
	resultPtr->rear = 0;

	return resultPtr;
}

void enqueue(CircleIntQueuePtr paraPtr, int paraValue) {
	printf("Enqueue: %d ", paraValue);
	if ((paraPtr->rear + 1) % TOTAL_SPACE == paraPtr->front) {
		printf("Queue full.\r\n");
		return;
	}

	paraPtr->data[paraPtr->rear] = paraValue;
	paraPtr->rear = (paraPtr->rear + 1) % TOTAL_SPACE;
}

int dequeue(CircleIntQueuePtr paraPtr) {
	int resultValue;
	if (paraPtr->front == paraPtr->rear) {
		printf("No element in the queue.\r\n");
		return -1;
	}

	resultValue = paraPtr->data[paraPtr->front];
	paraPtr->front = (paraPtr->front + 1) % TOTAL_SPACE;

	return resultValue;
}

void outputCircleIntQueue(CircleIntQueuePtr paraPtr) {
	int i;
	if (paraPtr->front == paraPtr->rear) {
		printf("Empty queue.");
		return;
	}

	printf("Elements in the queue:");
	for (i = paraPtr->front; i != paraPtr->rear; i = (i + 1) % TOTAL_SPACE) {
		printf("data[%d] = %d, ", i, paraPtr->data[i]);
	}

	printf("\r\n");
}

void testCircleIntQueue() {
	int i = 10;
	CircleIntQueuePtr tempPtr = initQueue();
	for (; i < 16; i++) {
		enqueue(tempPtr, i);
	}

	outputCircleIntQueue(tempPtr);

	for (i = 0; i < 6; i++) {
		printf("dequeue gets %d\r\n", dequeue(tempPtr));
	}

	for (i = 3; i < 6; i++) {
		enqueue(tempPtr, i);
	}

	for (i = 20; i < 30; i++) {
		enqueue(tempPtr, i);
		printf("dequeue gets %d\r\n", dequeue(tempPtr));
		outputCircleIntQueue(tempPtr);
	}

}

int main() {
	testCircleIntQueue();
	return 1;
}

2.输出结果

代码如下(示例):

Enqueue: 10 Enqueue: 11 Enqueue: 12 Enqueue: 13 Enqueue: 14 Queue full.
Enqueue: 15 Queue full.
Elements in the queue:data[0] = 10, data[1] = 11, data[2] = 12, data[3] = 13,
dequeue gets 10
dequeue gets 11
dequeue gets 12
dequeue gets 13
No element in the queue.
dequeue gets -1
No element in the queue.
dequeue gets -1
Enqueue: 3 Enqueue: 4 Enqueue: 5 Enqueue: 20 dequeue gets 3
Elements in the queue:data[0] = 4, data[1] = 5, data[2] = 20,
Enqueue: 21 dequeue gets 4
Elements in the queue:data[1] = 5, data[2] = 20, data[3] = 21,
Enqueue: 22 dequeue gets 5
Elements in the queue:data[2] = 20, data[3] = 21, data[4] = 22,
Enqueue: 23 dequeue gets 20
Elements in the queue:data[3] = 21, data[4] = 22, data[0] = 23,
Enqueue: 24 dequeue gets 21
Elements in the queue:data[4] = 22, data[0] = 23, data[1] = 24,
Enqueue: 25 dequeue gets 22
Elements in the queue:data[0] = 23, data[1] = 24, data[2] = 25,
Enqueue: 26 dequeue gets 23
Elements in the queue:data[1] = 24, data[2] = 25, data[3] = 26,
Enqueue: 27 dequeue gets 24
Elements in the queue:data[2] = 25, data[3] = 26, data[4] = 27,
Enqueue: 28 dequeue gets 25
Elements in the queue:data[3] = 26, data[4] = 27, data[0] = 28,
Enqueue: 29 dequeue gets 26
Elements in the queue:data[4] = 27, data[0] = 28, data[1] = 29,
数据结构——循环队列PTA习题 文章目录单选题题解函数题6-1 另类循环队列 (20分)输入样例:输出样例:代码6-2 双端队列 (25分)输入样例:输出样例:代码编程题7-1 堆栈模拟队列 (25分)输入格式:输出格式:输入样例:输出样例:代码模拟队列直接用queue 单选题 题号 题目 答案 1 所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。 错 2 在用数组表示的循环队列中,front值一定小于等于rear值。 错 3 为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓 阅读详情

相关推荐

数据结构-循环队列详解(c语言版)

本文主要介绍了循环队列的一些概念特点和C语言代码实现以及一些应用场景。

m0_55698213的博客 4213

数据结构3.6链队列,3.7循环队列

3.6链队列 转载:链队列与链表相似,不同的是它具有对列的运算方法,存储结构和链表相同,下面是其结构示意图: 这里的*Q类似于链表的头节点*head;它包含两个指向队列节点的指针front和rear;当front和rear都为NULL时队列为空;front指向队列第一个节点,rear指向最后一个节点,当两者指向同一个节点说明队列只有一个节点; 还有不设头指针的链队列表示形式,这里不予说明; 代码部分: #include<stdio.h> #include<malloc.h&g.

m0_65022800的博客 383

数据结构和算法(一)Java实现循环队列

1. 数据结构和算法(一)Java实现循环队列 1.1 什么是循环队列   循环队列:具有队头指针(front)和队尾指针(rear),指示队列元素所在的位置,避免删除元素时移动大量元素。队列也是一种线性表,只不过它是操作受限的线性表,只能在两端操作,先进先出(First In First Out,FIFO)。 循环队列特性: 只能队尾插入元素、在队头删除元素。 先进先出(First In ...

yuan_xw的专栏 3877

数据结构 3.7: 循环队列

整除的作用.想像操场跑道里放一队人, 循环的感觉就出来了.为了区分空队列与满队列, 需要留一个空间. 相当于不允许首尾相连. 还是画个图吧, 否则容易进坑.用链式结构, 空间的分配与回收由系统做, 用循环队列, 则是自己把控. 想像自己写的是操作系统, 从这个代码可以感受下内存的管理.

2302_79340870的博客 334

数据结构复习之[循环队列]

这算是我第一篇原创吧,就写一写我今天的学习笔记。 以下复习笔记来自郝斌老师的数据结构视频,在verycd下免费下载,通俗易懂的特点是初学者不可多得的。 线性结构的两种常见应用之二队列 定义: 一种可以实现“先进先出”的存储结构。 分类: 离散(链式)队列--用链表实现 静态(连续)队列--用数组实现

多尝试,继续找,不要停... 2452

手把手教你用EGM96模型校正DEM数据(含在线工具推荐)

本文详细介绍了如何使用EGM96地球重力场模型校正DEM数据中的高程偏差。通过对比WGS84椭球面与大地水准面的差异,解释了校正原理,并提供了从在线工具快速验证到Python脚本批量处理的全流程实战指南,帮助GIS开发者和数据分析师确保高程数据基准一致,提升空间分析精度。

ttt77的博客 1008

数据结构 C 代码 3.7: 循环队列

摘要: 循环队列能够很好地利用空间.

minfanphd的博客 887

AI 编程新范式:一文彻底搞懂 LLM、Agent、MCP、Skill 是怎么协作的

本文用通俗易懂的方式解析了AI编程新架构的核心概念。通过"三国演义"类比,文章将复杂的技术架构拆解为:Agent(军师/大脑)负责思考和决策,Skill(招式/手脚)执行具体操作,MCP(令箭/协议)作为通信标准,MCP Server(将军/身体)承载多个Skill。这套分工架构使AI从单纯聊天进化成能完成实际编程任务的全能助手,实现了关注点分离——Agent专注智能提升,Skill专注功能实现,MCP确保稳定连接。这正是Cursor、Claude等新一代AI开发工具采用的核心架构,标志

猫老板的豆 3084

数据结构3.7循环队列

代码边界判断清晰,让我掌握了顺序存储队列的优化思路,提升了数据结构实践与逻辑思维能力。通过取余运算实现数组空间循环利用,用队头、队尾指针高效管理元素,严格遵循队列。学习循环队列代码后,我理解了。

2601_95774683的博客 363

4 轴穿越机 Mark5 机架全解析:从历史演进到电机桨叶选型指南

本文围绕 4 轴穿越机 Mark5 机架展开,先介绍其发展历程(2018 年初代到 2023 年五代,迭代优化轻量化、刚性与兼容性),再明确其核心参数(轴距 220mm、兼容 4-6 寸桨等)对电机桨叶的约束。 详解电机(KV 值、尺寸、推力等)与桨叶(尺寸、螺距、材质等)选型要点及匹配原则(高 KV 配小桨、低 KV 配大桨),给出推重比、功率等理论计算公式,结合新手练习、花飞、竞速、航拍等场景提供具体选型案例,最后提及安全、成本、法规等注意事项,为爱好者提供全面选型参考。

bother3000的博客 1901

RTC 实时时钟实验

如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。

m0_55996456的博客 1206

出栈、入栈与入队、出队

新建一个栈,读取标准输入3个整数3 4 5,入栈3 4 5,依次出栈,打印 5 4 3,新建循环队列(Maxsize为5),读取标准输入3 4 5 6 7,入队7时,队满,打印false,然后依次出队,输出 3 4 5 6

qq_45347131的博客 2244

PCL1.12.1+VTK9.1+Qt5.14.2实战:解决QVTKOpenGLNativeWidget点云渲染窗口初始化报错问题

本文针对PCL1.12.1、VTK9.1与Qt5.14.2集成开发中,QVTKOpenGLNativeWidget点云渲染窗口初始化时出现的报错与黑屏问题,提供了深度分析与两种实战解决方案。核心在于理解VTK版本升级导致的渲染窗口类型不匹配,并指导开发者通过显式创建vtkGenericOpenGLRenderWindow或利用窗口ID嵌入,正确初始化并绑定可视化组件,从而稳定实现点云渲染。

weixin_29284657的博客 223

C/C++数据结构(六) —— 循环队列

循环队列 是一种线性数据结构,其操作表现基于 先进先出 原则并且 队尾被连接在队首之后以形成一个循环。

Edison's 小宇宙 2万+

Trae IDE项目开发全流程深度技巧与最佳实践

2026年AI开发新范式:Trae AI IDE深度解析 摘要 2026年,AI已成为软件开发的核心驱动力。字节跳动推出的AI原生IDE——Trae,从根本上重塑了开发体验,将AI作为第一公民而非附加功能。Trae通过深度集成大型语言模型和创新交互模式,解决了现代开发中的重复劳动、信息过载等核心痛点。 报告全面剖析了Trae的核心功能: 智能代码生成:支持上下文感知续写、自然语言驱动生成和多模态输入转换 对话式AI助手:提供侧边栏和行内对话模式,支持代码解释、Bug修复、重构建议等 Builder/SOLO

公众号:AI前沿侦探 161

Python 爬虫实战:爬取今日头条文章与阅读量数据

本文详细介绍了基于Python爬取今日头条文章与阅读量数据的完整方案。通过分析今日头条API接口,采用Requests+正则表达式技术实现数据抓取,重点解决加密参数构造、请求头模拟、反爬规避等核心问题。文章包含文章列表获取、详情数据提取、互动数据采集等完整流程,并提供数据存储与基础分析方法。同时强调合规使用爬虫技术,控制爬取频率,避免干扰平台运营。该方案可为内容传播分析、用户兴趣研究提供数据支持,但需注意接口参数更新和反爬机制变化,适时调整代码实现。

2503_91057718的博客 2520

【数据结构】循环队列

循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

jmlangel_的博客 1402

C# USB通信实现

在C#中,我们可以利用.NET框架提供的类库和API来实现与USB设备的通信。本文将介绍如何使用C#进行USB通信,并提供相应的代码示例。以上就是使用C#进行USB通信的基本过程。通过以上代码示例,你可以实现与USB设备的简单通信,具体的实现方式和细节根据你的实际需求进行调整和扩展。命名空间,该命名空间包含了与串口通信相关的类和方法。选择需要通信的USB设备,然后使用。步骤二:获取可用的USB设备列表。首先,在你的C#项目中引入。步骤三:打开USB端口。步骤六:关闭USB端口。步骤一:引入命名空间。

PixelProX的博客 4385

循环队列的基本操作,你学会了吗?

编程实现循环队列的基本操作:建队列,取队头元素,入队,出队

princekin 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据结构——循环队列

循环队列通过将数组的头尾相连,解决了普通队列的假溢出问题。具体来说,当队尾指针移动到数组的末尾时,它会自动跳转到数组的开头,形成一个循环。这样,队列可以更有效地利用数组的空间。 

weixin_75197906的博客 1336

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

循环队列+OJ题之设计循环队列

学了普通的队列,循环队列也该拿下了

adcxhw的博客 1241

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构_03队列与循环队列

队列 队列queue,是一个有序列表,可以用数组和链表实现 先进先出,如银行业务办理 用数组模拟队列 队尾:rear——rear会随着数据的输入而不断增加 队首:front——front会随着数据的输出而不断增加 队列的长度:rear - front + 1 最大容量:maxsize 注:这张图有问题,而且,front,rear不一定是从-1开始 数据添加 1. 添加之前需判断队列的容量——如何判断——rear表示的是队尾元素的序号,因为容量为 rear+1,只需判断 rear+1与 ma

qq_34774226的博客 221

数据结构之循环队列

文章目录一、循环队列结构体的定义:二、相关操作实现1.初始化2.依次对栈中的每个数据元素输出3.进队列4.出队列5.链队列中元素个数6.测试函数7.具体代码实现三、样例输出四、写在最后 循环队列 这里是数据结构个人学习的笔记记录,如有问题欢迎指正说明 一、循环队列 循环队列就好比我们乘坐公交车,当我们上车发现车后面坐满了而前面还有空座的时候,肯定不是说下车等下一俩,而是后面没座了那我就坐前面呗,循环队列解决的就是这样一个问题。因此我们将队列头尾相接的顺序存储结构称为循环队列。 先来定义循环队列的结

AHuRui的博客 2266

数据结构之循环队列详解

队列分为顺序队列和循环队列,顺序队列的实现有很多种方法,有数组和链表。数组实现的又分为使用队头队尾front,rear实现和利用一个变量size统计队列元素大小实现等等。并且关于size实现的顺序队列(数组和链表都实现过)我之前的数据结构文章已经实现过。 顺序队列我们可以使用排队买车票进行理解。 在讲循环队列之前,我们先讲一下顺序队列的假溢出。 1 顺序队列的假溢出 1️⃣:初始化空队列,q -> front = q -> rear = 0。 2️⃣:入队a1、a2、a3,q -> fr

weixin_44517656的博客 4209
上一篇: 数据结构3.6--链队列
下一篇: 数据结构-6.1二叉树的构建与遍历
dev_cc_
博客等级 码龄3年 41粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值