数据结构——循环队列(数组)

一、循环队列的定义

二、循环队列图示

 

三、循环队列使用规则 

为解决队满和队空的判断条件相同。

我们 采用  损失一个单元不用的方法

即当循环队列元素的个数是MAXSIZE-1时,就认为队列已满(front指向空的单元)

这样循环队列的队满条件就变成 :

(rear+1)%MAXSIZE==front

循环队列的队空条件依旧是:

front==rear

 

四、循环队列的代码 

#define MAXSIZE 4     typedef int DataType;
typedef struct
{DataType data[MAXSIZE];  //实际上只能存MAXSIZE-1 个数据int front;int rear;
}SeqQueue;//损失一个单元不用,即当循环队列中元素个数是MAXSIZE-1时,就认为队列已经满了
//front指向那个不使用的单元
//循环队列的队满的条件就是(rear+1)%MAXSIZE==front
//队空的条件是  front==rear//初始化队列
void InitQueue(SeqQueue* Q)//初始化队列函数
{Q->front = Q->rear = 0;//指针初始化
}//判断是否为空
int  EmptyQueue(SeqQueue* Q)//判断队空函数
{if (Q->front == Q->rear)//队列为空return 1;elsereturn 0;
}//判断是否为满
int  FullQueue(SeqQueue* Q)//判断队满函数
{if (Q->front == (Q->rear + 1) % MAXSIZE)//队尾指针加上1,再取余MAXSIZE的值如果等于队头指针,说明队列为满return 1;elsereturn 0;
}//入队操作
void InQueue(SeqQueue* Q, DataType x)//入队函数
{if (FullQueue(Q)){printf("队列已满,无法继续入队\n");return;}else{Q->rear = (Q->rear + 1) % MAXSIZE;//更新队尾指针rear,队尾指针加1再取余MAXSIZE,将数组形成一个循环Q->data[Q->rear] = x;//将入队的数据放到队列数组,更新后的rear所指向的位置}
}//出队操作
void DeQueue(SeqQueue* Q)//出队函数
{if (EmptyQueue(Q)){printf("队列已空,无法继续出队\n");return;}else{Q->front = (Q->front + 1) % MAXSIZE; //更新队头指针front, 队头指针加1再取余MAXSIZE, 将数组形成一个循环}
}//取队头操作
DataType GetFront(SeqQueue* Q)//取队头函数
{if (EmptyQueue(Q)){printf("队列已空,无队头元素\n");return 0;}else{int t;  //因为front指向的位置无元素,队头元素在front指向的后一位t = (Q->front + 1) % MAXSIZE; //将 队头指针加1再取余MAXSIZE 的值赋给treturn Q->data[t]; //返回数组中下标为t的元素}
}void ShowQueue(SeqQueue* Q)//显示队中元素函数
{int p = Q->front;if (p == Q->rear)printf("队列为空,无元素!\n");else{printf("\n从队头起队列中的个元素为:");while (p != Q->rear){printf("%5d", Q->data[(p + 1) % MAXSIZE]);p++;        p %= MAXSIZE; //使得p能从数组的首位地址重新遍历,形成循环,打印出所有的数组元素}}
}

五、循环队列的函数使用

1.入队函数:InQueue

int main()
{SeqQueue SQ;InitQueue(&SQ);//初始化InQueue(&SQ, 3);//入队InQueue(&SQ, 4);//入队InQueue(&SQ, 5);//入队//插入3次,满了InQueue(&SQ, 5);//第四次插入不了ShowQueue(&SQ);//打印数组中所有的值return 0;
}

 结果:

插入3次,满了。第四次插入不了

 

 2.取队头函数GetFront

int main()
{SeqQueue SQ;InitQueue(&SQ);//初始化InQueue(&SQ, 3);//入队InQueue(&SQ, 4);//入队InQueue(&SQ, 5);//入队//插入3次,满了printf("循环队列中的元素依次是:");ShowQueue(&SQ);//打印数组中所有的值printf("\n");DataType x = GetFront(&SQ);//取队头元素printf("\n队头元素是:%d \n", x);return 0;
}

结果:

 

3.出队函数DeQueue

int main()
{SeqQueue SQ;InitQueue(&SQ);//初始化InQueue(&SQ, 3);//入队InQueue(&SQ, 4);//入队InQueue(&SQ, 5);//入队//插入3次,满了printf("循环队列中的元素依次是:");ShowQueue(&SQ);//打印数组中所有的值printf("\n\n");DeQueue(&SQ);//出队一次InQueue(&SQ,99);//出队之后,再入队一次printf("操作后循环队列中的元素依次是:");ShowQueue(&SQ);//打印数组中所有的值return 0;
}

结果;

出队之后,再入队一次,打印新的循环队列

六、心得体会

  1. 队列是一种运算受限制的线性表,插入在队尾,删除在队头。
  2. 队列的逻辑结构和线性表也相同,数据元素之间存在一对一的关系,它的主要特性是先进先出
  3. 循环队列是队列的一种顺序表示和实现方法。与顺序栈类似,在队列的顺序存储结构中,用一组地址连续的存储单元依次存放从队头到队尾的元素。
  4. 由于队列中队头和队尾的位置都是动态变化的,因此需要附设两个指针front和rear,分别知识队头元素和队尾元素在数组中的位置。
  5. 普通的顺序队列会有假溢出,一个巧妙的办法就是将顺序队列的数组看成一个环状的空间,即规定最后一个单元的后继为第一个单元,我们形象地称之为循环队列。

 

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

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

相关文章

Spring框架深度解析:打造你的Java应用梦工厂

想要在Java企业级应用开发中大展身手?Spring框架的核心容器是你不可或缺的伙伴! 文章目录 一. 引言1.1 介绍Spring框架的重要性1.2 阐述核心容器在Spring框架中的作用1.3 故事开端 二. 背景介绍2.1 描述Spring框架的发展历程2.2 概述Spring框架的主要特点…

汇昌联信:拼多多入驻条件是哪些?

在电商领域,拼多多以其独特的团购模式迅速崛起,吸引了众多商家的目光。想要在拼多多上开店,了解其入驻条件是必不可少的第一步。下面将详细解读拼多多的入驻条件,帮助有意加入的商家们做好准备。 一、企业资质要求 想要成功入驻拼…

Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器和Supervisor守护服务

在 CentOS 7 上部署 ASP.NET Core 应用程序并配置 Nginx 作为反向代理服务器以及 Supervisor 作为守护服务涉及几个步骤。以下是详细的步骤指南: 1. 安装 .NET Core SDK 首先,你需要在 CentOS 7 上安装 .NET Core SDK。你可以从 Microsoft 的官方文档中…

vmware16下的ubuntu使用记录

设置ubuntu共享文件夹 cd /mnt/hgfs/ ls ls (列出当前目录下的文件的名字)(路径就是路径下的文件名字) windows传文件到linux 共享文件夹 复制文件到LinuxShare文件夹 拖拽文件 添加成功 拍摄快照 用于恢复之前某个时间点的状态

Java抽象类:为何它是你代码架构的基石?

目录 1、抽象类的概念 2、抽象类语法 3、抽象类特性 4、抽象类的作用 5、 完结散花 个人主页:秋风起,再归来~ 文章专栏:javaSE的修炼之路 个人格言:悟已往之不谏,知来者犹可追 克…

【p10】DFA (NFA确定化) 以及DFA的最小化

终于到这里了 可能是最难的部分?反正是网课时长最长的部分 需要画表,所以最好还是跟着网课一边学一边操作,不然没啥印象,上完网课之后没啥效果 文章目录 画表通过终结符给新的集合编号新建表格结束根据表格画图DFA初态集和终态集…

彩虹易支付用户中心美化主题 模版源码

简介: 彩虹易支付用户中心美化主题 模版源码 使用本主题前请备份官方版本文件再进行解压到user目录替换! 点击下载

SSH远程管理 远程访问及控制

SSH远程管理 SSH(Secure Shell) 是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功 能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早 期的 Telent (远程登录)、RSH(Remote Shell, 远程执行命…

IT行业现状与未来趋势

你眼中的IT行业现状与未来趋势 IT行业当前处于高速发展阶段,涵盖了各种技术领域,如人工智能、大数据、云计算、物联网、区块链等。以下是我眼中的一些现状和未来趋势: 1. 人工智能(AI)的普及和应用广泛化&#xff1a…

嗨动PDF编辑器适合你的pdf编辑器,试试吧!

pdf编辑器有哪些?在数字化办公日益普及的今天,PDF文档因其跨平台、高保真度的特性而备受欢迎。无论是工作汇报、学术研究还是日常学习,我们都需要对PDF文档进行编辑、修改和整理。然而,如何选择合适的PDF编辑器却成了许多人头疼的…

鼠标移到图片上,光线闪过效果的实现

本文用两种方式实现了鼠标移动到图片上时&#xff0c;有光线闪过的效果。 第一种&#xff1a;使用::before伪元素实现。 1.html代码部分 <div classcontainer><div class"item"><a href"#"><div><img src"./img/dizi.j…

vue3实战Easy云盘(一):创建项目+登录注册页面+构建框架页+上传头像/修改密码/退出登录

一、创建项目 1.创建项目 2.安装各种依赖 npm install highlightjs/vue-plugin moefe/vue-aplayer aplayer axios docx-preview dplayer element-plus highlight.js js-md5 sass sass-loader spark-md5 vue-clipboard3 vue-cookies vue-pdf-embed vue-router …

Linux系统(CentOS)下安装配置 Nginx 超详细图文教程

一、下载并安装 1.打开nginx官网并点击右侧的download&#xff0c;Nginx官网下载地址 2.选择稳定版本 我放在/usr/local/nginx/下&#xff0c;新建文件夹 mkdir /usr/local/nginx/ 通过xftp传输到Linux的服务器上&#xff0c;这里方法不过多复述。 或者如果Linux联网&#xf…

Hystrix服务熔断

服务熔断 熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时&#xff0c; 会进行服务降级&#xff0c;进而熔断该节点微服务的调用&#xff0c;快速返回“错误”的响应信息。当检测到该节点微 服务调用响应正常后恢复调用链路。 在Spri…

鸿蒙开发:【从TypeScript到ArkTS的适配规则】

从TypeScript到ArkTS的适配规则 ArkTS通过规范约束了TypeScript&#xff08;简称TS&#xff09;中过于灵活而影响开发正确性或者给运行时带来不必要额外开销的特性。本文罗列了所有在ArkTS中限制的TS特性&#xff0c;并提供了重构代码的建议。ArkTS保留了TS大部分的语法特性&a…

半监督的GCN:Semi-Supervised Classification With Graph Convolutional Networks

Semi-Supervised Classification With Graph Convolutional Networks -Theophilus Siameh-2017(2023) 思路 使用可扩展方法对图进行半监督学习,其中CNN应用在图数据上,得到GCN。 这种方法是在图的边的数量上进行线性的缩放模型,并学习包含局部图结构和图节点的几个隐藏层…

红米Turbo3小米平板6SPro澎湃OS系统强解BL锁-跳小米社区绑定-刷ROOT权限

红米Turbo3小米平板6SPro这2款设备都出厂为澎湃OS系统&#xff0c;官方提供都是小米社区申请解锁权限&#xff0c;然后自己答题解锁&#xff0c;门槛非常高&#xff0c;想要玩机root的用户&#xff0c;都在堵在门外。还在这目前这两款机型官方并没有加入强制验证&#xff0c;在…

【深度学习实战(33)】训练之model.train()和model.eval()

一、model.train()&#xff0c;model.eval()作用&#xff1f; model.train() 和 model.eval() 是 PyTorch 中的两个方法&#xff0c;用于设置模型的训练模式和评估模式。 model.train() 方法将模型设置为训练模式。在训练模式下&#xff0c;模型会启用 dropout 和 batch norm…

pytorch常用内置loss函数与正则化技术(补充小细节)

文章目录 前言一、常用损失函数(后面用到了新的会一一补充)1.1 回归中的损失函数1.1.1 nn.MSELoss()示例1:向量-向量示例2:矩阵--矩阵(维度必须一致才行)1.2 分类中的损失函数1.2.1 二分类(1)nn.BCELoss --- 二分类交叉熵损失函数示例1:向量-向量示例2:矩阵--矩阵(维…

NeoVim配置文件基本的

init.lua 文件 require(options) require(keymaps) require(plugins) require(colorscheme) require(lsp)-- 插件 require("config.lualine") require("config.nvim-tree") require("config.treesitter")~\lua\plugins.lua 文件 local lazypa…