循环队列的实现

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

队列就是一个特殊的线性表。特殊在于队列只允许在队头删除元素,在队尾添加新元素。和我们生活中的排队是一个道理。

队列的一种实现方式是用数组,但是用数组就会出现队列“假满”的情况。





于是循环队列就诞生了。

这只是逻辑结构,数组在内存的物理结构是不变的。我们关心的正是逻辑结构

下面是关键的几点:

1.初始化

         front=rear=0;


2.空   if(front==rear)

             return 1;    //为空

           else

            return 0;



3.满

       if(  (rear+1)   % QUEUESIZE == front )

             return 1    //满

      else

             return 0;

4.队中元素个数

       return (  rear-front+QUEUESIZE  ) % QUEUESIZE


具体实现代码:

# include <stdio.h>

# define QUEUESIZE 10   
                        //队列的容量 
 
typedef int DataType ;   

typedef struct queue{
	
	DataType data[QUEUESIZE];
	int front;
	int rear;
	
}Queue;


static void TraverseFunc(DataType tdata);

/***********队列ADT接口声明************/
void InitQueue(Queue *p);
int EnQueue(Queue *p,DataType tdata);
int DeQueue(Queue *p,DataType*pdata);
void TraverseQueue(Queue*p,void(*pfunc)(DataType));
unsigned int QueueLength(Queue *p);
int QueueIsFull(Queue *p);
int QueueIsEmpty(Queue*p);
/*************END*************/


int main (void)
{
	
	Queue test;
	InitQueue(&test);
	
	
	
	
	return 0;
} 


void InitQueue(Queue *p)
{
	
	p->front=p->rear=0;   
	
}

int EnQueue(Queue *p,DataType tdata)
{
	
	if(  (p->rear+1) %QUEUESIZE == p->front )
	  return 0;     //队列已满 
	
	p->data[p->rear]=tdata;
	p->rear=(p->rear+1)%QUEUESIZE;  //rear后移 

    return 1;	
}


int EeQueue(Queue *p,DataType*pdata)
{
	
	if(p->front==p->rear)
	   return 0;    //队列为空 
	
	*pdata=p->data[p->front];
	p->front=(p->front+1) % QUEUESIZE ; //front后移 
	
	return 1 ;

}

void TraverseQueue(Queue*p,void(*pfunc)(DataType))
{
	
	int i=p->front;
	
	while(i!=p->rear)
    {
    	
    	(*pfunc)(p->data[i]);
    	
    	i=(i+1)% QUEUESIZE ;      ///////
    	
    	
    }
	
	
}

unsigned int QueueLength(Queue *p)
{
	
	
	return (p->rear - p->front + QUEUESIZE)% QUEUESIZE ;
	
}

int QueueIsFull(Queue *p)
{
	
	if(p->front==(p->rear+1)%QUEUESIZE)
	   return 1;
	
	 
    return 0;
}

int QueueIsEmpty(Queue*p)
{
	
	if(p->front==p->rear)
	   return 1;
	
	return 0;
}

static void TraverseFunc(DataType tdata)//遍历方法
{
	
	printf("%d\n",tdata);
	
}





IEPE加速度同步采集卡、振动信号同步模块、温震一体八路高速采集 WJ288产品是一种物联网和工业以太网采集模块,实现了传感器数据采集并发送到网络。IEPE是“Integrated Electronics Piezo-Electric”的缩写,即集成电路型压电式传感器。这种带内置电子器件的压电传感器已成为工业应用领域的标准。半导体电路将压电传感器的高阻抗信号转换为更容易传输的低阻抗电压信号。借助IEPE,只需一根任意长度的标准电缆即可实现电源供给和信号传输,不会因电缆移动而产生测量误差。 阅读详情

相关推荐

SystemC实战:用C++搞芯片建模的5个典型场景(含代码示例)

本文通过五个典型实战场景,详细介绍了如何使用SystemC这一基于C++的硬件建模库进行芯片设计与系统级建模。内容涵盖从基础并发模块构建、事务级总线建模、跨时钟域验证,到与ModelSim协同仿真及多核系统性能探索,并提供了完整的代码示例,帮助软件工程师利用熟悉的C++工具链高效参与硬件架构设计与验证。

weixin_29191761的博客 316

实验三 链队列(c++)

一、实验目的 1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。 2、 学会使用栈和队列解决实际问题。 二、实验内容 1、 自己确定结点的具体数据类型和问题规模:      建立一个链队列,实现队列的入队和出队操作。 代码: #include using namespace std; const int maxsize=100;

YanHSama的博客 515

告别盲目调参:手把手教你用RKISP2.x Tuner理解AWB、AE、NR等核心模块

本文详细介绍了如何使用RKISP2.x Tuner工具进行ISP调试,重点解析AWB、AE、NR等核心模块的调参技巧。通过RV1126平台的实际操作演示,帮助工程师快速掌握可视化对比实验方法,告别盲目调参,提升图像信号处理效率。

weixin_30300225的博客 394

详解循环队列

本次学习了循环队列,了解了循环队列的入队,出队,队空,队满等基本操作,明白了循环队列的优点在于其高效的插入和删除操作,但需要注意的是在实现时需要处理满队列和空队列的情况。按照正常逻辑,计算队列长度只需要队尾减去队头即可,但是由于是循环队列,可能存在front大,rear小运算得出负数的情况,所以必须通过加上MAXSIZE再取余保证队列的大小为正数。,当队尾指针“追上”队头指针时,队列不再继续增长,而是继续利用之前出队的空间。需要预留一个空间来区分队列为空和队列满的状态,队列满的条件为。

weixin_55668080的博客 568

基于Simulink的基于MPC的实时ZMP约束步态优化仿真

本文完成了基于Simulink的MPC实时ZMP约束步态优化仿真,实现了:✅ 建立3D-LIPM预测模型✅ 设计带ZMP可行域约束的MPC优化器✅ 实现闭环实时求解与扰动抑制✅ 验证强鲁棒性与安全性✅ 为人形机器人野外行走、人机交互提供先进控制方案。

xiaoheshang_123的博客 86

【深度学习】什么是自回归模型?

自回归模型是一种重要的时间序列模型,通过利用过去的值来预测当前或未来的值。它在统计学、经济学、自然语言处理等领域有广泛的应用。自回归模型的简单性和可解释性使其成为许多应用的首选,但在更复杂的情况下,可能需要结合其他模型如移动平均模型(MA模型)或混合模型(如ARIMA)来更好地捕捉时间序列中的模式。扩散模型(Diffusion Model)和自回归模型(Autoregressive Model)是两种不同的生成模型,各自有独特的特点和应用场景。

q742971636的博客 1674

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

>✨给大家推荐一款很火爆的刷题、面试求职网站✨

记录学习点滴 5488

【Unity实战100例】Unity循环UI界面切换卡片功能

功能包括:可以设置半径,高度,速度,元素数量用户可以根据自己的实际需求接入 制作思路:创建每个元素对应的虚拟点,通过旋转管理这些虚拟点,然后把旋转信息和位置信息同步给实际的元素

纯技术流日常开发商业开发记录总结等 7718

【数据结构与算法 2】循环队列

一、队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。 进行插入操作的端称为队尾,进行删除操作的端称为队头。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。 二、循环队列

学Java,找哪吒 1万+

《网络信息制作与发布》实训全流程:从专题策划、网站构建到前端实现与上线发布

本文详细介绍了WEB设计专题网站从策划到发布的全流程。主要内容包括:1.网络专题设计(确定主题、编写策划方案、素材搜集整理);2.网站结构构建(设计二级栏目、绘制布局图);3.艺术设计(配色方案、版式设计);4.网页制作(使用Dreamweaver进行标准化布局);5.信息发布(通过Dreamweaver和CuteFTP上传文件、网站维护与备份)。以"学习WEB设计"专题为例,采用框架结构,包含20余个栏目,使用深灰和蓝色为主色调。文章提供了完整的操作步骤和技术要点,适用于网站开发学习者

深耕计算机专业知识与技术。 1536

【AI智能体】基于Coze制作跨境电商客服助手工作流实战操作详解

基于Coze制作跨境电商客服助手工作流实战操作详解

congge 3468

Java中循环队列实现_Java循环队列的实现方法

Java循环队列的实现方法时间:2017-09-13来源:华清远见JAVA学院生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题。那么Java如何实现循环队列呢?今天华清Java学院小编就以Java如何用数组实现循环队列为例,和大家分享一下Java循环队列的实现方法。Java循环队列的实现代码如下:1、队列的类class CirQue...

weixin_31459297的博客 2251

ER图从入门到精通:数据库建模全攻略

本文为数据库建模领域的 ER 图全面指南,系统解析从基础概念到实战应用的核心要点。首先介绍 ER 图的定义、三大组成元素(实体、属性、关系)及三种基础关系类型(一对一、一对多、多对多);其次详解绘制流程,涵盖工具选择(如 Visio、PowerDesigner)、需求分析方法及实体 - 属性 - 关系的分步建模技巧;进一步探讨弱实体、复合属性等高级概念,结合范式理论讲解模型优化策略;针对实体属性混淆、关系类型误判等常见问题提供解决方案;最后通过电商系统、图书馆管理系统等实际案例展示 ER 图设计全流程。

邓邓子的博客 4215

循环队列讲解,以及Java实现代码

Java实现循环队列,循环队列的详细讲解

tq02的博客 2226

NTscan扫描工具

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

使用数组实现循环队列

为了节省空间,这里使用数组实现了更加实用 的循环队列,代码主体和上一篇大多一样,但是涉及到一些细节。 下面是具体的思路: 上一篇中front表示第一个元素前面的位置,rear表示最后一个元素的位置, 但是,在这里由上图可知,front和rear的含义发生了调整。 牺牲一个空间,来提高的代码的可礼节性,这样的循环队列比maxSize上存储一个元素,但是无大碍。 这里面的一个重点就是循环队列的实际有效...

大道至简 3012

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

DS:循环队列的实现

对于循环队列,博主也是源自于一道力扣的OJ题力扣:循环队列的设置后来我在网上查过,这个循环队列是有自己的应用场景的!!并不是出题者为了出题而产生的,所以我觉得不光要能做会这道题,还得多去探究这道题的不同方式。而且这道题虽然是循环队列,看似好像要把头和尾连起来,但实际上实现过程中是可以不需要的!这也是他非常特别的一点,因此在这我会重点介绍他的数组实现和链式结构实现。

m0_74825196的博客 1091

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

基于Java数组实现循环队列

重点:循环队列,无论使用数组实现还是链表实现,都要多开一个空间,也就意味着,要是一个存k个数据的循环队列,要开k+1个空间,否则无法实现判空和满。

qq_62274623的博客 1149

循环队列三种实现

循环队列三种实现方式对比

weixin_44720212的博客 649

【数据结构】循环队列(C语言实现)

史上最详细的循环队列讲解!不怕你不会,就怕你不点进来!

Hello_World_213的博客 9979

用数组实现循环队列

<br />      若用数组实现队列一般会整成循环队列,要不队列没法用~~~实现的功能包括创建队列、入队列、出队列、读队列头~~~~~~~<br />/************************************************************************/ /* author : thomas E-mail: chenhua308@gmail.com */ /******

Thomas chen的专栏 1万+

一文读懂循环队列的实现细节

数据结构,算法,循环队列

虾米Life 2434
上一篇: 链式栈的接口实现
下一篇: python2与python3的区别
love1code
博客等级 码龄12年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值