数组实现循环队列(新增一个空间)
目录
一、前言
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镜…...
Linux光标主题管理工具x-cursor-help:从原理到实战
1. 项目概述:一个被低估的鼠标光标辅助工具如果你在Linux桌面环境下工作,尤其是使用像GNOME、KDE Plasma这类现代化的桌面环境,你可能会遇到一个不大不小但很恼人的问题:鼠标光标主题的安装和管理。从网上下载了一个漂亮的.tar.gz…...
越刷越空?不是自控力太差,是你的大脑“最高权限”丢了
被一块屏幕“遛”着走的人前几天深夜,我和几个以前在老东家一起扛过枪的兄弟,在一个烤串摊喝酒。一桌人,平均四十多岁,平时在公司里不是总监就是合伙人,西装革履,人模狗样。按理说,都算是社会化…...
BeagleBone Black设备树覆盖层实战:从原理到自定义SPI/UART配置
1. 项目概述:为什么BeagleBone Black开发者必须掌握设备树?如果你正在使用BeagleBone Black(BBB)进行嵌入式开发,并且已经不止一次地困惑于为什么某个外设(比如UART、SPI或者某个GPIO)无法按预期…...
基于RP2040与Santroller固件,复活旧吉他控制器玩转现代音游
1. 项目概述:让尘封的“神器”重获新生如果你和我一样,是个从《吉他英雄》、《摇滚乐队》时代走过来的老玩家,家里大概率还躺着一两把当年斥“巨资”购入的专用吉他控制器。它们手感扎实,造型酷炫,但最大的悲哀莫过于&…...
gifuct-js:高性能JavaScript GIF解码器的架构设计与性能优化策略
gifuct-js:高性能JavaScript GIF解码器的架构设计与性能优化策略 【免费下载链接】gifuct-js Fastest javascript .GIF decoder/parser 项目地址: https://gitcode.com/gh_mirrors/gi/gifuct-js gifuct-js是一个专注于高效GIF文件解析与解码的JavaScript库&a…...
Chrome QRCode插件终极指南:如何在3分钟内实现跨设备无缝内容同步
Chrome QRCode插件终极指南:如何在3分钟内实现跨设备无缝内容同步 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件,用于生成当前URL或者选中内容的二维…...
如何用Python在5分钟内自动解析简历关键信息?PyResParser终极指南
如何用Python在5分钟内自动解析简历关键信息?PyResParser终极指南 【免费下载链接】pyresparser A simple resume parser used for extracting information from resumes 项目地址: https://gitcode.com/gh_mirrors/py/pyresparser 在招聘高峰期,…...
【独家首发】ElevenLabs尚未官方支持的希伯来文增强模式:基于phoneme-level微调的48小时快速部署方案
更多请点击: https://intelliparadigm.com 第一章:希伯来文语音合成的技术挑战与ElevenLabs生态定位 希伯来文是一种自右向左(RTL)书写的辅音音素文字,其语音合成面临多重语言学与工程学挑战:元音符号&…...
基于Python与OpenCV的屏幕视觉自动化工具开发实战
1. 项目概述与核心价值 最近在折腾一个挺有意思的玩意儿,叫 screen-vision 。这名字听起来有点玄乎,但说白了,它就是一个 基于计算机视觉的屏幕内容实时分析与自动化工具 。你可以把它理解为一个“数字眼睛”,它能持续盯着你…...
【Claude基础】08.子代理系统:分身术与并行执行
文章目录[toc]0\. 【Claude基础】全部目录1\. 子代理设计哲学1.1 单一上下文窗口的局限1.2 核心价值1.3 子代理 vs 多会话 vs 多实例2\. 内置代理详解2.1 general-purpose — 通用多步任务2.2 Explore — 快速只读代码库分析2.3 Plan — 研究型实施规划2.4 claude-code-guide —…...
