定制建设网站启博微分销官网

diannao/2026/1/25 1:07:37/文章来源:
定制建设网站,启博微分销官网,minisite网站案例,建筑工程管理适合女生吗目录 一、题目#xff1a; 二、思路详解#xff1a; 1.循环队列的存储定义 2.循环队列的创建 3.循环队列的判空与判断情况 (1) 循环队列的判空: (2) 循环队列的判满 4.循环队列元素的插入 5.循环队列元素的删除 6.获取队头元素 7.获取队尾元素 8.循环队列释放 三…目录 一、题目 二、思路详解 1.循环队列的存储定义 2.循环队列的创建 3.循环队列的判空与判断情况 (1) 循环队列的判空: (2) 循环队列的判满 4.循环队列元素的插入 5.循环队列元素的删除 6.获取队头元素 7.获取队尾元素  8.循环队列释放 三、完整代码展示 一、题目 设计你的循环队列实现。 循环队列是一种线性数据结构其操作表现基于 FIFO先进先出原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里一旦一个队列满了我们就不能插入下一个元素即使在队列前面仍有空间。但是使用循环队列我们能使用这些空间去存储新的值。 你的实现应该支持如下操作 MyCircularQueue(k): 构造器设置队列长度为 k 。Front: 从队首获取元素。如果队列为空返回 -1 。Rear: 获取队尾元素。如果队列为空返回 -1 。enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。isEmpty(): 检查循环队列是否为空。isFull(): 检查循环队列是否已满。 难度中等 题目链接622. 设计循环队列 示例 MyCircularQueue circularQueue new MyCircularQueue(3); // 设置长度为 3 circularQueue.enQueue(1);  // 返回 true circularQueue.enQueue(2);  // 返回 true circularQueue.enQueue(3);  // 返回 true circularQueue.enQueue(4);  // 返回 false队列已满 circularQueue.Rear();  // 返回 3 circularQueue.isFull();  // 返回 true circularQueue.deQueue();  // 返回 true circularQueue.enQueue(4);  // 返回 true circularQueue.Rear();  // 返回 4题目解析就是根据题中给的接口进行函数的实现。要求我们实现一个循环队列。 用心阅读下方会有很大的收获。  二、思路详解 1.循环队列的存储定义 首先我们需要定义出一个循环队列的存储定义这里采用的是使用动态数组来进行模拟循环队列根据题中给出的接口返回类型我们可以知道循环队列的数据类型为int 。 其次还需定义两个记录数组的下标一个记录队列的队头另一个记录队列的队尾(也就是指向要入队的下一个元素的位置)。另外还要提供一个表示要存储数据的具体个数。 如图 代码 //采用动态数组的形式来模拟循环队列 typedef struct {int* a; //指向数组int front; //队头int tail; //队尾int k; //数据个数 } MyCircularQueue; 2.循环队列的创建 循环队列的创建先使用malloc进行创建一个 循环队列空间 接着根据给的数据个数k让指针a指向一个动态数组在分别对front,tail,k进行初始化注意tail 0表示要存放的下一个数据元素的位置对动态数组a开辟空间的时候要多开辟一个空间避免假溢出的现象。最后一定要返回之前创建的循环队列。 代码 //创建长度为k的循环队列 MyCircularQueue* myCircularQueueCreate(int k) {//使用动态内存函数来申请内存//这里多申请一个空间的目的是防止假溢出//使用malloc创建一个循环队列MyCircularQueue* obj (MyCircularQueue*)malloc(sizeof(MyCircularQueue));//为循环队列里面的指针a ,让a指向一个长度为k1的数组obj-a (int*)malloc(sizeof(int)*(k1));obj-front 0; //队头从数组的下标0开始obj-tail 0; //队尾指向下一个元素obj-k k; //队列的长度为kreturn obj; } 物理存储情况如图 但是我们一般会到其循环的逻辑结构逻辑存储如图 3.循环队列的判空与判断情况 循环队列的插入和删除是不可避免的当这之前就需要先完成判和判满的接口。注意一定要把判空和判满的函数实现放在队列插入和删除函数实现的前面。 (1) 循环队列的判空: 根据函数的返回类型是bool空我们就返回true ,否则返回false。 isEmpty(): 检查循环队列是否为空。 因为这里采取的是通过动态数组来模拟循环队列所以队列空的条件就是当front tail 的时候此时的循环队列就是空的。 如图 代码 bool myCircularQueueIsEmpty(MyCircularQueue* obj) {//队空就是队头与队尾相同时return obj-front obj-tail; } (2) 循环队列的判满 同样根据函数的返回类型是bool空我们就返回true ,否则返回false。 isFull(): 检查循环队列是否已满。 什么时候会满呢当(tail1)%(k1) front,就是队尾下标加1模开辟空间的个数  可能很多会对为什么要多开辟一个空间原因就在这对于队列的判满的情况 当没有创建的额外空间队列只有数据10 和 11 的情况下 像上图就是假溢出现象这个队列并没有满。 总的来说 循环队列为了区分队列的空和满需要额外增加一个空的元素来占据队列的一个位置这样队列满的状态就可以通过头尾指针相邻且不重合来判断而不会出现头尾指针重合但队列实际上并不满的情况。同时循环队列需要对头尾指针进行模运算如果没有额外的空间那么当队列最后一个元素占据了数组最后一个位置时下一个元素就会从数组的第一个位置开始这样就无法正确进行模运算而增加一个空的元素可以解决这个问题。 代码 bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj-tail1)%(obj-k1) obj-front; } 4.循环队列元素的插入 enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。 插入前判断是否满满就返回false,接着就是数据的插入插入后对tail下标进行取模(因为是反复利用原来的空间还有就是避免溢出)插入成功就返回true。 代码 //插入元素 bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {//插入元素前先进行判断是否满if(myCircularQueueIsFull(obj)){return false;}//插入元素使用尾插obj-a[obj-tail] value;obj-tail;//避免tail的下标越界obj-tail%(obj-k1);return true; } 5.循环队列元素的删除 删除前要进行判断是否为空。队头减一进行删除删除后取模。 deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。 代码 //出队 bool myCircularQueueDeQueue(MyCircularQueue* obj) {//删除元素队列不能为空if(myCircularQueueIsEmpty(obj)){return false;}//出队头删obj-front;obj-front%(obj-k1);return true; } 6.获取队头元素 获取前进行判断是否为空。 Front: 从队首获取元素。如果队列为空返回 -1   代码 //获取队首元素 int myCircularQueueFront(MyCircularQueue* obj) {//队列不能为空if(myCircularQueueIsEmpty(obj)){return -1; //队空返回-1}return obj-a[obj-front]; } 7.获取队尾元素  获取前进行判断是否为空。 Rear: 获取队尾元素。如果队列为空返回 -1   代码 //获取队尾元素 int myCircularQueueRear(MyCircularQueue* obj) {//队列不能为空if(myCircularQueueIsEmpty(obj)){return -1; //队空返回-1}//注意当tail 0的情况return obj-a[(obj-tail - 1 obj-k1)%(obj-k1)]; }解释一下 上述最后一行代码 重点 首先tail是指向要存放下一个元素的位置找队尾元素时tail要进行-1。 因为数组下标最小是从0开始的当tail 0且队列不为空的情况下上方代码obj-tail-1,就会造成0-1 -1的情况。上方采用(obj-tail - 1 obj-k1)%(obj-k1)就可以完美的避免当然 其实可以写成 int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;// return obj-a[(obj-tail-1 obj-k1)%(obj-k1)];if(obj-tail 0){return obj-a[obj-k];}else{return obj-a[obj-tail-1];} } 8.循环队列释放 因为用malloc开辟的动态内存空间为了避免内存泄漏我们还要释放内存。注意释放的顺序。 代码 void myCircularQueueFree(MyCircularQueue* obj) {free(obj-a);free(obj); } 三、完整代码展示 代码  //采用动态数组的形式来模拟循环队列 typedef struct {int* a; //指向数组int front; //队头int tail; //队尾int k; //数据个数 } MyCircularQueue;//创建长度为k的循环队列 MyCircularQueue* myCircularQueueCreate(int k) {//使用动态内存函数来申请内存//这里多申请一个空间的目的是防止假溢出//使用malloc创建一个循环队列MyCircularQueue* obj (MyCircularQueue*)malloc(sizeof(MyCircularQueue));//为循环队列里面的指针a ,让a指向一个长度为k1的数组obj-a (int*)malloc(sizeof(int)*(k1));obj-front 0; //队头从数组的下标0开始obj-tail 0; //队尾指向下一个元素obj-k k; //队列的长度为kreturn obj; } bool myCircularQueueIsEmpty(MyCircularQueue* obj) {//队空就是队头与队尾相同时return obj-front obj-tail; }bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj-tail1)%(obj-k1) obj-front; }//插入元素 bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {//插入元素前先进行判断是否满if(myCircularQueueIsFull(obj)){return false;}//插入元素使用尾插obj-a[obj-tail] value;obj-tail;//避免tail的下标越界obj-tail%(obj-k1);return true; }//出队 bool myCircularQueueDeQueue(MyCircularQueue* obj) {//删除元素队列不能为空if(myCircularQueueIsEmpty(obj)){return false;}//出队头删obj-front;obj-front%(obj-k1);return true; }//获取队首元素 int myCircularQueueFront(MyCircularQueue* obj) {//队列不能为空if(myCircularQueueIsEmpty(obj)){return -1; //队空返回-1}return obj-a[obj-front]; }//获取队尾元素 int myCircularQueueRear(MyCircularQueue* obj) {//队列不能为空if(myCircularQueueIsEmpty(obj)){return -1; //队空返回-1}//注意当tail 0的情况return obj-a[(obj-tail - 1 obj-k1)%(obj-k1)]; }void myCircularQueueFree(MyCircularQueue* obj) {free(obj-a);free(obj); }/*** Your MyCircularQueue struct will be instantiated and called as such:* MyCircularQueue* obj myCircularQueueCreate(k);* bool param_1 myCircularQueueEnQueue(obj, value);* bool param_2 myCircularQueueDeQueue(obj);* int param_3 myCircularQueueFront(obj);* int param_4 myCircularQueueRear(obj);* bool param_5 myCircularQueueIsEmpty(obj);* bool param_6 myCircularQueueIsFull(obj);* myCircularQueueFree(obj); */

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

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

相关文章

我的世界做皮肤的网站莱芜雪野湖天气

众所周知,python是一种脚本语言,python程序必须在python环境下运行,所以如果想把自己写的程序给别人看的话,就比较麻烦,他需要先配置python环境,对于电脑小白来说这是“要命”的事情。而且如果是客户的话&a…

广州信科做网站上海公司招聘信息

现在有好多初学jsp的网友经常会问数据库怎么连接啊,怎么老出错啊?所以我集中的在这写篇文章供大家参考,其实这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学者学习,所以我就这样做了,当大家学…

linux网站开发微软 开源 wordpress

这里我们使用Java的线程与锁来解析共享内存模型;做过java开发并且了解线程安全问题的知道,要使某段代码是线程安全的那必须要满足两个条件:内存可见性、原子性; 内存可见性 在JVM规定多个线程进行通讯是通过共享变量进行的&a…

视频网站开发框架新乡网站建设方案

一、CGI概述CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互,也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理,将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单…

医疗门户网站管理系统wordpress管理员

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

做商城网站的项目背景河北省建设主管部门网站

2020年的CES上,华硕推出了一款灵耀X2 Duo笔记本,灵耀X2 Duo采用了和灵耀X2 Pro相同的屏幕技术,C面同样采用了一块ScreenPad Plus副屏,机身也更轻更薄。如今灵耀X2 Duo的处理器升级至英特尔第十代酷睿,正在参与“618”大…

笔记网站开发代码淄博网站建设哪家便宜

MySQL协议分析 此阶段的协议分析是在未压缩未加密情况下的协议分析 思路: 结合Oracle官网和自己用wireshark抓的网络数据包进行协议分析 官网说明 mysql包共分为4段,格式如下: 第一段:payload(通常是执行的SQL语句&…

网站建设的缺点kuake自助建站系统源码

5922. 统计出现过一次的公共字符串 给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1:输入:words1 ["leetcode","is","amazing","as",&…

在哪请人做网站国外做外贸的小网站

多个任务在在同一队列中传递的同一种数据类型,而队列集能够在任务之间传递不同的数据类型。 配置流程:(更详细流程参考正点原子的教程) 1、启用队列集将configUSE_QUEUE_SETA置1) 2、创建队列集 3、创建队列或信号…

可以做网站首页的图片素材wordpress汉化主题模板

现象:引入路径正确但文件爆红,不影响运行但不美观(按住Ctrl可以跳转到该文件,关闭后过段时间再打开还是爆红) 原因 (1)相对路径使用了不正确的大小写 (2)项目不支持force…

宁波网站制作哪家优惠多山东网络建站推广

水题 发布时间: 2017年6月25日 14:06 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 平均因数个数的统计对于估算数论题目复杂度具有非常重要的意义。小A同学听了今天的课后,于是想要自己写一个程序,求出1到n的平均因数个数…

重庆网站建设 吧做算命类网站违法吗?

转载自 JVM初探- 使用堆外内存减少Full GC问题: 大部分主流互联网企业线上Server JVM选用了CMS收集器(如Taobao、LinkedIn、Vdian), 虽然CMS可与用户线程并发GC以降低STW时间, 但它也并非十分完美, 尤其是当出现Concurrent Mode Failure由并行GC转入串行时, 将导致非常长时间的…

主流网站开发高端企业网站模板

前言随着今年6月份的 HTTP/3 协议的正式发布,它背后的网络传输协议 QUIC,凭借其高效的传输效率和多路并发的能力,也大概率会取代我们熟悉的使用了几十年的 TCP,成为互联网的下一代标准传输协议。在去年 .NET 6 发布的时候&#xf…

网站界面设计如何实现功能美与形式美的统一佛山做外贸网站咨询

jsp里面编写java代码注意加双引号 if("<%type%>""open"){document.getElementById("e").focus();}

为什么做pc网站06627网页制作和网站建设试卷

含位域结构体的sizeof: 前面已经说过&#xff0c;位域成员不能单独被取sizeof值&#xff0c;我们这里要讨论的是含有位域的结构体的sizeof&#xff0c;只是考虑到其特殊性而将其专门列了出来。 C99规定int、unsigned int和bool可以作为位域类型&#xff0c;但编译器几乎都对此作…

梅县区住房和城乡规划建设局官方网站做企业网站需要什么条件

全世界只有3.14 % 的人关注了爆炸吧知识10月18日&#xff0c;有网友爆料称“上海野生动物园猛兽区一饲养员遭群熊撕扯”。随后&#xff0c;上海野生动物园证实&#xff0c;该饲养员目前已身亡。据悉&#xff0c;他才27岁&#xff0c;还没成家。从网上发布的现场视频来看&#x…

网站设计服务开发小程序商城多少钱

文章目录 VMWare 介绍Android 系统介绍概述最终效果前置步骤开始安装 VMWare 介绍 VMware Workstation是VMware公司开发的一款桌面虚拟化软件。它允许用户在一台物理计算机上同时运行多个操作系统&#xff0c;每个操作系统都在自己的虚拟机中运行。这使得用户可以在同一台计算…

电商设计就是网站设计吗wordpress 表格程序

效果 需求 我们这个页面顶部有tabs 栏 而且可以滑动到底部 进行分页 实现这样的页面我们应该怎么做 你应该会想到scroll-view 这个组件吧 下面我们来详情介绍一下这个页面的实现和功能开发 首先展示一下代码 item 循环项 <template><div class"wechat-or…

企业网站建设ejiew天猫交易购买平台

HTTP协议 HTTP协议&#xff08;HyperText Transfer Protocol&#xff09;即超文本传输协议 &#xff0c;是TCP/IC网络体系结构应用层的一个客户端-服务端协议&#xff0c;是所有客户端&#xff0c;服务端数据传输的基石&#xff08;数据传输规则&#xff09; 特点 ⭐基于TCP协…

假发网站是怎么做的wordpress慢6

介绍 Elasticsearch Curator通过以下方式帮助您策划或管理您的Elasticsearch索引和快照&#xff1a; 从集群中获取索引&#xff08;或快照&#xff09;的完整列表&#xff0c;作为可操作列表迭代用户定义的过滤器列表&#xff0c;根据需要逐步从此可操作列表中删除索引&#…