数组实现循环队列(新增一个空间)
目录
一、前言
1.如何实现循环?
2.如何判断队列为空?
3.如何判断队列为满?
二、循环队列的结构定义
三、循环队列的创建及其初始化
四、入队
五、出队
六、取队头元素
七、取队尾元素
八、判空
九、判满
十、销毁队列
一、前言
利用数组实现循环队列,重点要解决的问题有三个:
1.如何实现循环?
由于数组大小k是确定的,要实现队列循环就需要让数组下标循环,利用两个下标front、back分别指向首元素和尾元素的下一个位置。front = (front+1) % k,back = (back+1) % k,即可完成下标的循环。
2.如何判断队列为空?
初始化时,front和back都为0,此时为空。因此我们确定判空条件为 front = back时循环队列为空。
3.如何判断队列为满?
我们发现,当队列满时,由于back指向队尾元素的下一个,因此队列满时,front = back ,与队列空时相矛盾。如何解决呢?
两种解决方法:
一是:循环队列结构中新增队列大小 size ,当size=0且front = back时,队列为空;当size≠0且front = back时,队列为满。
二是:新增一个空间,不存储数据,front = (front+1) % (k+1),back = (back+1) % (k+1),当 (back+1) % (k+1) = front时,队列为满。
本文仅讲解方法二,方法一详见:数组实现循环队列(增设队列大小size)-CSDN博客
二、循环队列的结构定义
循环队列结构中包括数组、头指针、尾指针、队列容量
//方法二
//循环队列的结构定义
typedef int MCQDataType;typedef struct {MCQDataType *a;//数组int front;//头指针,指向队头元素int back;//尾指针,指向队尾元素的下一个位置int k;//循环队列容量
} MyCircularQueue;
三、循环队列的创建及其初始化
首先动态申请一个循环队列结构体的内存空间,然后为数组动态申请k+1个内存空间,并将头指针、尾指针都初始化为0,队列容量初始化为k。
//方法二
//循环队列的创建及其初始化
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue *mcq=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));mcq->a=(MCQDataType*)malloc(sizeof(MCQDataType)*(k+1));mcq->k=k;mcq->front=mcq->back=0;return mcq;
}
四、入队
先判断队列是否为满,不满则入队,同时尾指针要 加1模(k+1) ,back = (back+1) % (k+1)
//方法二
//入队
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if((obj->back+1)%(obj->k+1)==obj->front)//满队列{return false;}obj->a[obj->back]=value;obj->back=(obj->back+1)%(obj->k+1);return true;
}
五、出队
先判断队列是否为空,不空则出队,同时头指针要 加1模(k+1),front = (front+1) % (k+1)
//方法二
//出队
bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(obj->front==obj->back)//空队列{return false;}obj->front=(obj->front+1)%(obj->k+1);return true;
}
六、取队头元素
先判断队列是否为空,不空则返回头指针指向的元素
//方法二
//取队头元素
int myCircularQueueFront(MyCircularQueue* obj) {if(obj->front==obj->back)//空队列{return -1;}return obj->a[obj->front];
}
七、取队尾元素
先判断队列是否为空,不空再判断尾指针的位置:
如果尾指针指向0位置,则队尾元素在数组最后一位,即k的位置(因为总共开辟了k+1个空间);
如果尾指针不指向0位置,那么队尾元素位置是back-1。
//方法二
//取队尾元素
int myCircularQueueRear(MyCircularQueue* obj) {if(obj->front==obj->back)//空队列{return -1;}if(obj->back==0){return obj->a[obj->k];//重点}else{return obj->a[obj->back-1];}
}
八、判空
判空条件是 front = back
//方法二
//判空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->back==obj->front;
}
九、判满
判满条件是 (back+1)%(k+1) = front
//方法二
//判满
bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->back+1)%(obj->k+1)==obj->front;
}
十、销毁队列
动态申请的内存空间都要动态销毁free
//方法二
//销毁循环队列
void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}
相关文章:
数组实现循环队列(新增一个空间)
目录 一、前言 1.如何实现循环? 2.如何判断队列为空? 3.如何判断队列为满? 二、循环队列的结构定义 三、循环队列的创建及其初始化 四、入队 五、出队 六、取队头元素 七、取队尾元素 八、判空 九、判满 十、销毁队列 一、前言 …...
Mysql 索引概念回顾
一、什么是索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据…...
基于SpringBoot+Vue学生成绩管理系统前后端分离(源码+数据库)
一、项目简介 本项目是一套基于SpringBootVue学生成绩管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试,确…...
Hadoop集群破坏试验可靠性验证
集群环境说明: 准备5台服务器,hadoop1、hadoop2、hadoop3、hadoop4、hadoop5; 分别部署5个节点的zookeeper集群、hadoop集群、hbase集群 本次对于Hadoop集群测试主要分为五个方面: 手动进行datanode节点删除:&#…...
Notepad++ 安装TextFx插件失败
据说TextFx插件是Notepad常用插件之一;有很多格式化代码的功能;下面安装一下; 插件管理里面看一下,没有这个TextFx; 根据资料,先安装NppExec; 然后下一个5.9老版本的Notepad,如下图…...
探究Logistic回归:用数学解释分类问题
文章目录 前言回归和分类Logistic回归线性回归Sigmoid函数把回归变成分类Logistic回归算法的数学推导Sigmoid函数与其他激活函数的比较 Logistic回归实例1. 数据预处理2. 模型定义3. 训练模型4. 结果可视化 结语 前言 当谈论当论及机器学习中的回归和分类问题时,很…...
杨辉三角
打印n行杨辉三角,n<10。 输入格式: 直接输入一个小于10的正整数n。 输出格式: 输出n行杨辉三角,每个数据输出占4列。 输入样例: 5输出样例: 11 11 2 11 3 3 11 4 6 4 1代码长度限制 16 KB 时间限制 400 ms 内存限制 6…...
MS5228/5248/5268:2.7V 到 5.5V、 12/14/16Bit、内置基准、八通道数模转换器
MS5228/MS5248/MS5268 是一款 12/14/16bit 八通道输出的电压型 DAC ,内部集成上电复位电路、可选内部基准、接口采用四线串口模式, 最高工作频率可以到 40MHz ,可以兼容 SPI 、 QSPI 、 DSP 接口和 Microwire 串口。输出接到一个 …...
2024年江苏省职业院校技能大赛 信息安全管理与评估 第二阶段教师组 (样卷)
2024年江苏省职业院校技能大赛 信息安全管理与评估 第二阶段教师组 (样卷) 项目竞赛样题 本文件为信息安全管理与评估项目竞赛-第二阶段样题,内容包括:网络安全事件响应、数字取证调查、应用程序安全。 本次比赛时间为180分钟。 介绍 GeekSec专注技能竞…...
最新版IDEA专业版大学生申请免费许可证教学(无需学校教育邮箱+官方途径+非破解手段)
文章目录 前言1. 申请学籍在线验证报告2. 进入IDEA官网进行认证3. 申请 JB (IDEA) 账号4. 打开 IDEA 专业版总结 前言 当你进入本篇文章时, 你应该是已经遇到了 IDEA 社区版无法解决的问题, 或是想进一步体验 IDEA 专业版的强大. 本文是一篇学生申请IDEA免费许可证的教学, 在学…...
zookeeper常用接口
ZookeeperTemplate 是 Spring Cloud Zookeeper 中的一个重要类,它提供了一组方便的方法来操作 Zookeeper,例如创建节点、获取节点数据、删除节点等。下面列举了 ZookeeperTemplate 的一些常用方法及其作用: createExclusive(String path):创建独占节点。如果节点已经存在,…...
scipy笔记:scipy.interpolate.interp1d
1 主要使用方法 class scipy.interpolate.interp1d(x, y, kindlinear, axis-1, copyTrue, bounds_errorNone, fill_valuenan, assume_sortedFalse) 2 主要函数 x一维实数值数组,代表插值的自变量y N维实数值数组,其中沿着插值轴的 y 长度必须等于 x 的…...
外包干了一个月,技术明显进步。。。。。
先说一下自己的情况,本科生生,19年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试…...
docker安装node及使用
文章目录 一、安装node二、创建node容器三、进入创建的容器如有启发,可点赞收藏哟~ 一、安装node 查看可用版本 docker search node安装最新版本 docker install node:latest二、创建node容器 docker run -itd --name node-test node–name node-test࿱…...
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 18 章:对抗性提示
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 18 章:对抗性提示 对抗性提示是一种允许模型生成能够抵御某些类型的攻击或偏差的文本的技术。这种技术可用于训练更健壮、更能抵御某些类型的攻击或偏差的模型。 要在 ChatGPT 中使用对抗性提…...
若依框架的搭建
若依框架 若依框架的搭建(前后端分离版本)环境要求IDEA拉取Gitee源码Mysql 配置Redis 配置后端启动前端配置问题解决 效果展示 若依框架的搭建(前后端分离版本) 简介 RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基…...
SQL Server 数据库,多表查询
4.2使用T-SQL实现多表查询 前面讲述过的所有查询都是基于单个数据库表的查询,如果一个查询需要对多个表进行操作, 就称为联接查询,联接查询的结果集或结果称为表之间的联接。 联接查询实际上是通过各个表之间共同列的关联性来查询数据的&…...
程序解释与编译
▶1.程序的解释执行方式 程序语言强写的计策机指令序列称为“源程序”,计算机并不能直接执行用高级语言编写的源程序,源程序必须通过“翻译程序”翻译成机器指令的形式,计算机才能项别和执行。源程序的翻译有两种方式:解释执行和编译执行。不…...
聊聊 Jetpack Compose 的 “状态订阅自动刷新” -- mutableStateListOf
Jekpack Compose “状态订阅&自动刷新” 系列: 【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - MutableState/mutableStateOf 】 【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - remember 和重组作用域 】 【 聊聊 Jetpack Compose 的 …...
Dockerfile详解#如何编写自己的Dockerfile
文章目录 前言编写规则指令详解FROM:基础镜像LABEL:镜像描述信息MAINTAINER:添加作者信息COPY:从宿主机复制文件到镜像中ADD:从宿主机复制文件到镜像中WORKDIR:设置工作目录 前言 Dockerfile是编写docker镜…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
