位置: 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画线条)

  • 浏览器怎么查历史(浏览器怎么查历史记录呢)

    浏览器怎么查历史(浏览器怎么查历史记录呢)

  • 荣耀30pro+刷新率是多少hz(荣耀30pro+刷新率是多少Hz)

    荣耀30pro+刷新率是多少hz(荣耀30pro+刷新率是多少Hz)

  • 710和730性能差多少(710处理器和730处理器哪个好)

    710和730性能差多少(710处理器和730处理器哪个好)

  • nogl4ph是什么意思(qq中nogl4ph是什么意思)

    nogl4ph是什么意思(qq中nogl4ph是什么意思)

  • 闲鱼冻结资金多久到账(闲鱼冻结资金多久自动解冻啊)

    闲鱼冻结资金多久到账(闲鱼冻结资金多久自动解冻啊)

  • oppoace有没有红外线(oppoace有红外线功能吗)

    oppoace有没有红外线(oppoace有红外线功能吗)

  • qq免费浮屏有哪些(qq的浮屏免费使用)

    qq免费浮屏有哪些(qq的浮屏免费使用)

  • 手机网速正常电脑很慢(手机网速正常电脑只有十几k)

    手机网速正常电脑很慢(手机网速正常电脑只有十几k)

  • 苹果手机qq群课堂为什么看不到画面(苹果手机qq群课堂在哪里打开)

    苹果手机qq群课堂为什么看不到画面(苹果手机qq群课堂在哪里打开)

  • 陌陌不实名不能用吗(陌陌不实名制可以正常用吗)

    陌陌不实名不能用吗(陌陌不实名制可以正常用吗)

  • 华为手机搜索栏怎么调出来(华为手机搜索栏在哪里)

    华为手机搜索栏怎么调出来(华为手机搜索栏在哪里)

  • 华为平板休眠怎么灰了(华为平板休眠怎么取消)

    华为平板休眠怎么灰了(华为平板休眠怎么取消)

  • qq怎么不用好友辅助验证(qq怎么不用好友辅助验证开小号)

    qq怎么不用好友辅助验证(qq怎么不用好友辅助验证开小号)

  • 号码拉黑后打电话是什么(号码拉黑后打电话)

    号码拉黑后打电话是什么(号码拉黑后打电话)

  • ps怎么虚化图片背景(ps怎么虚化图片边框)

    ps怎么虚化图片背景(ps怎么虚化图片边框)

  • 抖音怎么对口型步骤(抖音怎么对口型唱歌视频教程)

    抖音怎么对口型步骤(抖音怎么对口型唱歌视频教程)

  • cad平方怎么打出来(cad平方怎么打出来的符号)

    cad平方怎么打出来(cad平方怎么打出来的符号)

  • 苹果电脑声音怎么调(苹果电脑声音怎么调出来)

    苹果电脑声音怎么调(苹果电脑声音怎么调出来)

  • 华为手机开锁密码忘记了怎么办(华为手机开锁密码忘了怎么刷机)

    华为手机开锁密码忘记了怎么办(华为手机开锁密码忘了怎么刷机)

  • 快手个人介绍怎么写才能上热门(快手个人介绍怎么不显示)

    快手个人介绍怎么写才能上热门(快手个人介绍怎么不显示)

  • 微信随手拍功能在哪里(微信随手拍有奖励吗)

    微信随手拍功能在哪里(微信随手拍有奖励吗)

  • 华为手环3有nfc吗(华为手环3有nfc功能吗)

    华为手环3有nfc吗(华为手环3有nfc功能吗)

  • oppoa5微信铃声怎么设置(oppo手机微信铃声怎么调)

    oppoa5微信铃声怎么设置(oppo手机微信铃声怎么调)

  • 应该如何
  • 定期定额户申报表怎么填
  • 实验用品包括实验仪器吗
  • 待处理财产损益年底怎么处理
  • 工业企业总产值的计算是以什么为主体
  • 自然人管理系统银行信息
  • 个人厂房租赁税率是多少
  • 异地经营如何纳税
  • 复印的原始凭证可以作为记账依据吗
  • 增值税采用
  • 个税手续费返还会计分录
  • 劳务费代扣代缴后还需要开发票吗
  • 工程造价超出职称怎么办
  • 大家怎么看恒大品牌
  • 外地报销怎么报
  • 总公司给分公司开发票
  • 年终奖有计算公式吗
  • 房地产开发桩基施工方案
  • 税控盘抵减增值税需要结转吗
  • 当期应税销售收入是含税还是不含税
  • 已认证的发票对账怎么办
  • 利润表所得税费用怎么填
  • 非直系亲属继承房产后再卖掉后交税吗
  • 集团内部企业之间借款利息增值税
  • 办公室电话费
  • 增值税发票自查报告
  • php编写登陆界面
  • 电脑系统权限管理在哪里
  • linux系统设置中文语言
  • 季度交企业所得税是按照什么来交的
  • 备抵法是什么科目
  • win10电脑c盘满了怎么转移到d盘
  • 国家税务总局关于个人因解除劳动合同
  • 旅游企业税务筹划
  • 租房开的发票收的税怎么做账?
  • yolo系列算法比较
  • 【历史上的今天】4 月 7 日:IBM System/360 问世;以太网的发明者诞生;第一个 RFC 文档发布
  • ech命令
  • php图像识别
  • cookie from
  • 帝国cms如何设置最新
  • 按摊余成本计量的应收账款
  • 季度企业所得税会计分录怎么做
  • 注册机械加工公司需要什么
  • 电子承兑接收了,但是后来怎么没有了
  • 其他科技推广服务业可以加计扣除吗
  • 电缆租赁发票开具属于什么项目
  • 无形资产有在建工程吗
  • 卸车费属于什么费用
  • 外出经营流程
  • 政府补助的范围
  • 怎样在excel计算
  • 冲销管理费用如何做分录
  • 确认收入时,也必须确认资产或债务
  • 购买汽车的工本费如何入账
  • 结转固定资产清理科目
  • 手工账本应付账款怎么做
  • 受托开发软件一般做什么
  • 教育类退费
  • 健全的财务会计制度承诺函
  • Mysql中LAST_INSERT_ID()的函数使用详解
  • 分页存储过程的实现
  • 硬盘安装windows xp
  • win8 更改电脑设置
  • win8系统如何
  • liunx改时间命令
  • win10玩饥荒
  • jsonarray fromobject
  • ubuntu搭建ftp服务器的步骤
  • 拦截器 aop
  • jquery的实现原理
  • python基本入门
  • jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
  • jquery里的ready是什么意思
  • 12种JavaScript常用的MVC框架比较分析
  • python3.8.3怎么用
  • python集合的基本操作
  • 电子税务局申领的发票怎么读入金税盘
  • 货物劳务税包括哪些税
  • 税务登记时必须要填银行账号吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设