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

  • 博客网站如何来策划(博客的网址怎么设置)

    博客网站如何来策划(博客的网址怎么设置)

  • 抖音粉丝团升级经验每一级需要多少(抖音粉丝团升级亲密度)

    抖音粉丝团升级经验每一级需要多少(抖音粉丝团升级亲密度)

  • iphonex外屏碎了有必要换吗(iphonex外屏碎了换多少钱)

    iphonex外屏碎了有必要换吗(iphonex外屏碎了换多少钱)

  • 华硕win10充电60就不充了(华硕win10充电80就不充了)

    华硕win10充电60就不充了(华硕win10充电80就不充了)

  • b站会员几个人同时登录(b站会员几个人用)

    b站会员几个人同时登录(b站会员几个人用)

  • 大王卡激活了不用会怎样(大王卡激活了不交钱会怎么样)

    大王卡激活了不用会怎样(大王卡激活了不交钱会怎么样)

  • vivo手机照片怎么传到另一个手机(vivo手机照片怎么备份到云端)

    vivo手机照片怎么传到另一个手机(vivo手机照片怎么备份到云端)

  • 微信朋友圈的图片怎么删除掉(微信朋友圈的图片怎么删除)

    微信朋友圈的图片怎么删除掉(微信朋友圈的图片怎么删除)

  • 在腾讯视频买的东西在哪里看订单(在腾讯视频买的电影可以分享吗)

    在腾讯视频买的东西在哪里看订单(在腾讯视频买的电影可以分享吗)

  • win10重装系统能保留应用吗(win10重装系统能清除病毒吗)

    win10重装系统能保留应用吗(win10重装系统能清除病毒吗)

  • 小米cc9是什么时候上市的(小米cc九是什么时候发布的)

    小米cc9是什么时候上市的(小米cc九是什么时候发布的)

  • ipad怎么看qq群共享(平板怎么看qq共同好友)

    ipad怎么看qq群共享(平板怎么看qq共同好友)

  • word文档保存后不见了(word文档保存后内容不见了怎么办)

    word文档保存后不见了(word文档保存后内容不见了怎么办)

  • 微信怎么传原画质视频(微信怎么传原画质视频给好友)

    微信怎么传原画质视频(微信怎么传原画质视频给好友)

  • 手机不能锁屏怎么办(手机锁屏不能锁怎么办)

    手机不能锁屏怎么办(手机锁屏不能锁怎么办)

  • 怎么开手机双卡模式(手机开双卡怎么开)

    怎么开手机双卡模式(手机开双卡怎么开)

  • 蓝牙耳机如何切换双耳(蓝牙耳机如何切换歌曲)

    蓝牙耳机如何切换双耳(蓝牙耳机如何切换歌曲)

  • 手机腾讯视频怎么看直播(手机腾讯视频怎么下载到本地相册)

    手机腾讯视频怎么看直播(手机腾讯视频怎么下载到本地相册)

  • 三星s9怎么遥控空调(三星s9有遥控功能吗)

    三星s9怎么遥控空调(三星s9有遥控功能吗)

  • pr可以剪辑音频吗(pr可以剪辑音频么)

    pr可以剪辑音频吗(pr可以剪辑音频么)

  • 饭店收银员电脑操作流程(饭店收银员电脑培训视频)

    饭店收银员电脑操作流程(饭店收银员电脑培训视频)

  • 怎么设置手机停机(怎么设置手机停机铃声)

    怎么设置手机停机(怎么设置手机停机铃声)

  • win10怎么删除搜索框(win10怎么删除搜索)

    win10怎么删除搜索框(win10怎么删除搜索)

  • 单位内部食堂如何做账务处理
  • 发票校验码被章盖住了
  • 缴纳的增值税如何申请退税
  • 残疾人加计扣除政策文件
  • 个人独资企业租赁收入如何纳税
  • 转让固定资产发生的费用计入什么科目
  • 待处理产品损益账户的核算内容不包括
  • 有留抵税额要考虑税负吗
  • 不是公司股东的投资者可以提前拿走投资款吗
  • 企业全额承担社保怎么算
  • 新会计准则要求
  • 公会经费开具的法律依据
  • 商业汇票记什么会计科目?
  • 小规模购买财务软件怎么做分录
  • 记账凭证汇总表和汇总记账凭证有什么区别
  • 公司账上没车可以报车辆保险吗
  • 其他资金账簿和资产账簿
  • 本月负数发票大于正数发票 留抵的增值税怎么做账
  • 个体工商户清算报告
  • win10指纹传感器在哪里
  • 未开票收入申报后又要开票
  • 本年利润有余额可以结账吗
  • php环境配置教程Apace
  • php定时执行代码
  • PHP:mcrypt_generic_deinit()的用法_Mcrypt函数
  • 贴现资金是信贷资金吗
  • 医院装修设计费用取费标准表
  • 其他权益工具投资属于什么科目
  • 其他业务收入是什么意思
  • php preg_match
  • 发票带折扣怎么开
  • node-js
  • _ html
  • web搜索与挖掘
  • iotop命令 监视磁盘I/O状态
  • 退回以前年度的增值税账务处理
  • 运输发票抵扣税率是多少
  • 研发支出可以全是管理费用
  • 应收账款项目的金额公式
  • 代垫费用开票明细怎么写
  • 结转本期损益怎么看亏损
  • 帝国cms商城教程
  • 购进货物用于建筑安装
  • 税后工资怎么申报个税
  • 以前年度损益调整借贷方向
  • 预期信用损失率的确认依据和过程
  • 收到以前年度退款怎么做分录
  • 收到实务返利的发票
  • 盈余公积的例子
  • 本年利润每个月需要结转吗
  • 公司开业两年后辞职
  • 怎样可以冲销企业微信
  • 预缴增值税什么科目
  • 电子发票怎么截屏
  • 制造费用与辅助费用哪个先结转
  • bulk insert formatfile
  • windows性能监视器横坐标
  • Windows时间同步时出错该怎么解决?
  • windows自带的碎片整理程序
  • 怎么检测软件有没有毒
  • centos作用
  • windows10推送
  • win7休眠模式在哪
  • win7怎么设置最佳性能
  • javascript中匿名函数
  • python jieba用法
  • perl cgi
  • nodejs requirejs
  • [置顶] 汉诺塔的原理剖析以及递归的解决办法
  • 修改jquery版本号不生效
  • Javascript Object 对象学习笔记
  • python画足球
  • 电子普通发票怎么查验真伪
  • 安徽营业执照网上怎么申请
  • 手机申报税务不成功怎么办
  • 金融知识宣传的建议
  • 车辆购置税减免政策上汽大通 大家mifa6
  • 浙江省工伤停工留薪期分类目录
  • 新三步走和旧三步走的异同点
  • 上海市税务局的电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设