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

  • 优酷怎么使用全景视频教程(优酷如何全屏观看)

    优酷怎么使用全景视频教程(优酷如何全屏观看)

  • 荣耀x10和华为nova7se的对比(荣耀X10和华为nova65G哪个好)

    荣耀x10和华为nova7se的对比(荣耀X10和华为nova65G哪个好)

  • 华为手机关闭屏保图片自动下载怎么办(华为手机关闭屏幕显示时间怎么设置)

    华为手机关闭屏保图片自动下载怎么办(华为手机关闭屏幕显示时间怎么设置)

  • 怎么看固态硬盘和机械硬盘(怎么看固态硬盘的型号)

    怎么看固态硬盘和机械硬盘(怎么看固态硬盘的型号)

  • 苹果11照片怎么涂鸦(苹果11照片怎么导入电脑)

    苹果11照片怎么涂鸦(苹果11照片怎么导入电脑)

  • 苹果信号四个感叹号(苹果信号四个感叹号没有副卡)

    苹果信号四个感叹号(苹果信号四个感叹号没有副卡)

  • 苹果x还原所有设置会怎样(苹果x还原所有设置照片会没吗)

    苹果x还原所有设置会怎样(苹果x还原所有设置照片会没吗)

  • 电脑进程怎么打开(电脑进程怎么打开文件)

    电脑进程怎么打开(电脑进程怎么打开文件)

  • gra-ul10是什么型号(华为gra-cl10)

    gra-ul10是什么型号(华为gra-cl10)

  • 锂电池短路后能恢复吗(锂电池短路后能充电吗)

    锂电池短路后能恢复吗(锂电池短路后能充电吗)

  • 华为nova6手机桌面时间不见了怎么设置(华为nova6手机桌面的图标怎么隐藏起来)

    华为nova6手机桌面时间不见了怎么设置(华为nova6手机桌面的图标怎么隐藏起来)

  • 全民k歌录屏为什么没有声音(全民k歌录屏为什么没有声音vivo)

    全民k歌录屏为什么没有声音(全民k歌录屏为什么没有声音vivo)

  • 拼多多抢先拼单是什么(拼多多抢先拼单是真的吗)

    拼多多抢先拼单是什么(拼多多抢先拼单是真的吗)

  • 第一个分组计算机网络出现于(第一个分组计算机出现于哪一年)

    第一个分组计算机网络出现于(第一个分组计算机出现于哪一年)

  • 为什么有的朋友圈要点进去才能看到(为什么有的朋友圈刷不到但是点进去都可以看)

    为什么有的朋友圈要点进去才能看到(为什么有的朋友圈刷不到但是点进去都可以看)

  • soul能查通讯录好友吗

    soul能查通讯录好友吗

  • 华为小艺怎么连续对话(华为小艺怎么连接手机蓝牙)

    华为小艺怎么连续对话(华为小艺怎么连接手机蓝牙)

  • 手机qq怎么设置密保(手机qq怎么设置空间权限)

    手机qq怎么设置密保(手机qq怎么设置空间权限)

  • 天猫精灵方糖和in糖的区别(天猫精灵方糖和小爱同学play哪个好)

    天猫精灵方糖和in糖的区别(天猫精灵方糖和小爱同学play哪个好)

  • 优酷猜你想搜怎么去掉(优酷猜你想看怎么关闭)

    优酷猜你想搜怎么去掉(优酷猜你想看怎么关闭)

  • 如何打开ie浏览器(如何打开ie浏览器设置)

    如何打开ie浏览器(如何打开ie浏览器设置)

  • 小米6是什么处理器(小米6是什么型号规格)

    小米6是什么处理器(小米6是什么型号规格)

  • 10代酷睿什么时候发布(10代酷睿什么时候降价)

    10代酷睿什么时候发布(10代酷睿什么时候降价)

  • pxe oprom是什么意思(pxe rom什么意思)

    pxe oprom是什么意思(pxe rom什么意思)

  • vivo的分辨率在哪设置(vivo手机分辨率在哪里调)

    vivo的分辨率在哪设置(vivo手机分辨率在哪里调)

  • 如何办理一码通二维码 (办理一码通需要什么材料)

    如何办理一码通二维码 (办理一码通需要什么材料)

  • Go分布式爬虫笔记(五)(分布式网络爬虫)

    Go分布式爬虫笔记(五)(分布式网络爬虫)

  • 成立蔬菜公司免税吗
  • 城市基础设施配套费减免
  • 增值税减免税申报明细表举例
  • 收不回来的装修钱怎么办
  • 出库入库结存表
  • 应收账款余额百分比法是什么意思
  • 贷款还款利息怎么还
  • 5个点的税率是多少
  • 福利费的支出要求及标准
  • 企业新增固定资产流程图
  • 货款现金收据可以做账吗
  • 公司代垫个税会计分录
  • 交通运输业安全员证
  • 应收账款对应的科目有哪些
  • 报销发票会计怎么处理
  • 企业购买扶贫物资怎么入账
  • 注销时公司账上没有钱付股东投资款
  • pdf格式发票怎么打印标准大小
  • 专票开户行信息少股份有限公司有影响吗?
  • 个人房产税征收标准
  • 建筑业会计实操视频教程
  • 小规模纳税人应交增值税科目设置
  • 公司为员工负担个税怎么做账
  • 合并报表收费
  • 发票查出来显示不一致是为啥
  • 机票的进项
  • 民办非企业单位和私营单位的区别
  • 公司买别人汇票有风险吗
  • macbook自带的游戏
  • 坏账是什么意思
  • 建筑业销项税和进项税计算
  • 如何保护电子邮件账户不被黑客攻击
  • 电脑系统权限管理在哪里
  • 付员工经济补偿金计入工资总额吗
  • OS X Yosemite系统怎么制作u盘安装盘
  • 企业车间承包合同的法律效力
  • 计提个体户经营所得税
  • PHP:mcrypt_cfb()的用法_Mcrypt函数
  • 其他业务收入跨年调整
  • php fopen()
  • 直接材料成本差异账户在平时登记贷方登记
  • 电子发票查询真伪
  • 商票贴现 银票贴现
  • 企业生产经营过程中的在产品属于
  • laravel 关联
  • php通过url传递参数
  • 编制合并财务报表的程序主要包括
  • pytorch广播相乘
  • php中input的用法
  • thinkphp百万级数据查询
  • 出口货物退货会退税吗
  • 在建工程明细科目有土地使用权摊销吗
  • 设计服务的成本票可以暂估吗
  • Python可变数据类型和不可变数据类型
  • 广东高速公路过路费收费标准
  • 投资收益收到的现金增加的原因
  • 其他综合收益的税后净额怎么计算
  • 建筑企业预缴所得税税率是多少
  • 土地出让金如何缴纳
  • 不需要支付的应付账款
  • 税控维护费跨年怎么算
  • 既有从价又有从租如何计算房产税
  • 收到免税发票会计分录
  • 账户信息变更说明
  • 公司备用金使用后没有发票抵扣
  • 原材料按实际成本核算与按计划成本核算相比
  • win8蓝屏解决方法
  • windows xp运行
  • xp系统无线网络连接怎么没有
  • win8的系统
  • mcupdate.dll
  • cocos2dx onpause崩
  • unity精灵编辑器
  • css放大字体
  • 批处理结束后不关闭窗口
  • 新浪微博手机客户端下载
  • python能不能开发微信小程序
  • 税盘换电脑怎么登陆
  • 没工作个人所得税
  • 广告发布合同属于什么合同
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设