位置: IT常识 - 正文

【Leetcode】设计循环队列("设计")

编辑:rootadmin
【Leetcode】设计循环队列

推荐整理分享【Leetcode】设计循环队列("设计"),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:设计test,设计it,ll设计,设计test,设计it,ll设计,leetcode设计题,lid设计,内容如对您有帮助,希望把文章链接给更多的朋友!

目录

【Leetcode622】设计循环队列

A.链接

B.题目再现

 C.解法


【Leetcode622】设计循环队列A.链接

设计循环队列

B.题目再现

 C.解法

其实这题用数组或是链表都能解决,但是如果是用链表的话,那么队列为空的条件和队列满了的条件是一样的,都为 front==rear,这样就无法判断,加个哨兵位的头节点可以解决这个问题,但是后面接口的实现又会很麻烦,所以这题还是推荐用数组实现。

创建数组时,我们多开1个空间,也就是开 k+1 个空间;

具体来说:

刚开始队列为空,所以 front==rear==0;

1.插入数据时,在下标为 rear 的位置插入,然后rear++,为了防止下次插入数据时越界,rear还要模上 k+1 ;

【Leetcode】设计循环队列(

当rear+1==front即队列满了,就不能插入,返回false,但是这里不能简单地判断 rear+1==front,因为有几种特殊的情况需要注意:

2.删除数据时,要先判断队列是否为空,若为空则返回false;

若不为空,只需让front++,注意这了还是要让front 模上k+1,防止加着加着就越界了。

3.获取队头数据很简单,只需要在此之前判断队列是否为空,为空则返回-1;

不为空则返回 front;

4.获取队尾数据时,在此之前同样需要判空,若为空,则返回-1;

若不为空,因为 rear 始终表示的是下一个位置,所以返回 rear -1,但是如果 rear 的值是0的话,rear-1==-1,访问就越界了,这个特殊的情况需要注意,或者不单独判断这个特殊情况,直接先让rear-1,再加上k+1,然后模上k+1,返回其结果,这样即使rear是0,也不会造成越界访问。

5.判空很简单,只需判断 rear 是否等于 front 即可。

typedef struct { int *arr; int front; int rear; int k;} MyCircularQueue;bool myCircularQueueIsFull(MyCircularQueue* obj) { //不能简单地判断rear+1==front即为满,要考虑特殊情况 return ((obj->rear+1)%(obj->k+1))==(obj->front); }bool myCircularQueueIsEmpty(MyCircularQueue* obj) { if(obj->front==obj->rear) return true; else return false;}MyCircularQueue* myCircularQueueCreate(int k) { MyCircularQueue*obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue)); if(obj==NULL) return NULL; obj->front=obj->rear=0; obj->k=k; //这里记录k的值,后面的接口需要用到 obj->arr=(int *)malloc(sizeof(int)*(k+1)); //开 k+1 个空间 if(obj->arr==NULL) return NULL; return obj;}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) { if(myCircularQueueIsFull(obj)) //队列为满则返回false return false; obj->arr[obj->rear++]=value; obj->rear%=(obj->k+1); //防止 rear 加着加着就越界了 return true;}bool myCircularQueueDeQueue(MyCircularQueue* obj) { if(myCircularQueueIsEmpty(obj)) //队列为空则返回false return false; obj->front++; obj->front%=(obj->k+1); //防止 front 加着加着就越界了 return true;}int myCircularQueueFront(MyCircularQueue* obj) { if(myCircularQueueIsEmpty(obj)) //队列为空则返回-1 return -1; return obj->arr[obj->front];}int myCircularQueueRear(MyCircularQueue* obj) { if(myCircularQueueIsEmpty(obj)) return -1; //rear表示的是下一个位置,所以队尾数据的下标时rear-1,但要考虑rear==0 这一特殊情况 return obj->arr[(obj->rear-1+obj->k+1)%(obj->k+1)]; }void myCircularQueueFree(MyCircularQueue* obj) { free(obj->arr); //先销毁创建的数组 free(obj);}

🐲👻这循环队列的讲解就到这里了,若有错误或是建议欢迎小伙伴们指出。🐯🤖

🥰🤩希望小伙伴们可以多多支持博主哦。😍😃

😁😄谢谢你的阅读。😼😸

本文链接地址:https://www.jiuchutong.com/zhishi/297887.html 转载请保留说明!

上一篇:基于Java+SpringBoot+Vue前后端分离仓库管理系统设计实现

下一篇:一篇canvas带你画出整个特效世界(canvas画线条)

  • 查补以前年度税款
  • 税务局开专票作废重开流程
  • 增量留抵退税会计处理
  • 吸收合并一般需要多久
  • 核定扣除公式
  • 一般纳税人开差额票的税率
  • 非货币投资如何缴纳企业所得税
  • 企业发行债券的目的
  • 发票不附销货清单可以吗
  • 收到未税货款怎么入账
  • 投资款多投了怎么办
  • 已抵扣专用发票冲红怎么操作
  • 从国内往国外寄东西要多久
  • 股东变更没有公章和营业执照怎么办
  • 佣金可以直接转到个人账户吗
  • 加工费发票怎么做账务处理
  • 电子发票真伪查询
  • 享受免税的企业每月直接零申报吗
  • 消防工作经历证明哪些单位可以开
  • 甲供材料如何纳税
  • 消费税如何避税计算
  • 增值税减免税备案什么时候开始
  • 事业单位坏账怎么处理
  • 某房产开发公司向银行借款
  • 增值税及附加税是什么意思
  • 企业预交的宽带费能退吗
  • 税务自查补税后还有风险吗
  • 工会经费使用具体办法
  • 固定资产清理是什么项目
  • 电脑网速不好怎么提升网速
  • php7.3
  • linux 数字加减
  • vue解决数据量过大的问题
  • 织梦采集器图片本地化
  • 企业取得的搬迁补贴
  • 在杂志上发表文章算出版吗
  • 非盈利组织固定资产没入帐 怎么调账
  • axios请求设置超时时间
  • php 密码加密
  • 劳务费和工程劳务费有区别
  • 财政总预算会计的主体是
  • 织梦常用调用标签
  • linux中ubuntu安装教程
  • 企业出租无形资产使用权取得的收入应计入
  • 所得税汇算清缴调整项目
  • 股权转让溢价款缴纳增值税
  • 计提坏帐包含其他收入吗
  • sql server row_number over
  • 普通发票记账联丢了怎么解决
  • 无形资产减值迹象有哪些
  • 固定资产投资入库申报材料
  • 结汇的汇率差异怎么算
  • 失控发票已补交什么意思
  • 房地产毛利额纳税调整
  • 应收账款收不回来的情况说明
  • 劳务派遣的工资是谁发的
  • 科目汇总表账务处理程序登记总账的依据是
  • 报销差旅费用什么收款凭证还是转账凭证
  • 收到技术服务费计入什么科目
  • 企业是否必须建立巡察制度
  • 怎么设置现金流
  • sql server错误和使用情况报告
  • mysql允许字段为空
  • 硬盘安装在机箱内,属于主机的组成部分
  • 外接法实物图
  • mac怎么设置应用权限
  • 苹果知识大全
  • win7系统关闭自动休眠
  • win8怎么添加桌面
  • win7系统如何查看内存条型号
  • dos怎么开启
  • 微信小程序上传文件的API是
  • 深入理解ffmpeg pdf
  • jquery easyui插件
  • web前端入门教程
  • iframe例子
  • 电子税务局开的发票怎么作废
  • 注销外经证需要身份证吗
  • 什么是个人所得税起征点
  • 公司完税证明去哪里开具
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设