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

  • 抖音怎么在直播间点赞(抖音怎么在直播间隐藏名字)

    抖音怎么在直播间点赞(抖音怎么在直播间隐藏名字)

  • 微信夜间功能在哪里开启(微信夜间功能在哪)

    微信夜间功能在哪里开启(微信夜间功能在哪)

  • 上淘宝平台需要有什么条件(上淘宝平台需要多少钱)

    上淘宝平台需要有什么条件(上淘宝平台需要多少钱)

  • wdc硬盘是不是固态(wd硬盘是固态的吗)

    wdc硬盘是不是固态(wd硬盘是固态的吗)

  • 三星电脑怎么截屏(三星电脑怎么截图和保存)

    三星电脑怎么截屏(三星电脑怎么截图和保存)

  • 微机显示系统使用的显示标准是什么(计算机显示系统)

    微机显示系统使用的显示标准是什么(计算机显示系统)

  • 电脑多久换一次(电脑多久换一次电池)

    电脑多久换一次(电脑多久换一次电池)

  • 微信为什么要上传身份证照片(微信为什么要上传照片)

    微信为什么要上传身份证照片(微信为什么要上传照片)

  • wps校园版有啥区别(wps校园版和office)

    wps校园版有啥区别(wps校园版和office)

  • 备忘录怎么录语音(备忘录怎么录语音苹果手机)

    备忘录怎么录语音(备忘录怎么录语音苹果手机)

  • iphone8能升级ios13吗(iphone8能升级ios15.7吗)

    iphone8能升级ios13吗(iphone8能升级ios15.7吗)

  • 苹果8p是单卡还是双卡(苹果8p是单卡嘛?)

    苹果8p是单卡还是双卡(苹果8p是单卡嘛?)

  • 金立m6原装壁纸哪里找(金立的壁纸)

    金立m6原装壁纸哪里找(金立的壁纸)

  • 华为nova5z搭载什么处理器(华为nova5搭载什么芯片)

    华为nova5z搭载什么处理器(华为nova5搭载什么芯片)

  • iphone11pro怎么设置九键(iphone11pro怎么设置电量显示数字)

    iphone11pro怎么设置九键(iphone11pro怎么设置电量显示数字)

  • iqoo参数配置(iqoo8参数配置)

    iqoo参数配置(iqoo8参数配置)

  • ios12怎么清理垃圾文件(ios12怎么清理内存)

    ios12怎么清理垃圾文件(ios12怎么清理内存)

  • excel怎么在日期后面加星期几(excel怎么在日期后面加星期)

    excel怎么在日期后面加星期几(excel怎么在日期后面加星期)

  • 手机进灰声音小怎么办(手机进灰声音小怎么解决)

    手机进灰声音小怎么办(手机进灰声音小怎么解决)

  • 苹果6p触摸ic坏了症状(苹果6触摸ic坏了维修多少钱)

    苹果6p触摸ic坏了症状(苹果6触摸ic坏了维修多少钱)

  • 苹果xr开机键在哪里(苹果手机xr开机键)

    苹果xr开机键在哪里(苹果手机xr开机键)

  • window10锁屏设置密码(window10锁屏界面怎么设置)

    window10锁屏设置密码(window10锁屏界面怎么设置)

  • 转转怎么注销(转转怎么注销账号?)

    转转怎么注销(转转怎么注销账号?)

  • JavaScript 发展的前世今生(js的发展历史)

    JavaScript 发展的前世今生(js的发展历史)

  • vue中,给一个URL地址,利用FileSaver.js插件下载文件到本地(vue url 参数)

    vue中,给一个URL地址,利用FileSaver.js插件下载文件到本地(vue url 参数)

  • vue 同局域网访问不到的问题及解决

    vue 同局域网访问不到的问题及解决

  • 织梦dedecms内容页上一页下一页链接调用教程(织梦cms要钱吗)

    织梦dedecms内容页上一页下一页链接调用教程(织梦cms要钱吗)

  • 财产转让所得个人所得税优惠政策
  • 税盘收费吗
  • 个人所得税起征点2023税率表
  • 政府项目如何进项目
  • 金税盘锁死提示什么
  • 收到加工费普通发票怎么做账务处理
  • 小型企业利润表
  • 权益法核算的好处
  • 小微企业免税销售额和其他免税销售额
  • 个体工商户的个人所得税如何申报
  • 税收的六大作用
  • 购买债券取得的利息收入计入什么科目
  • 银行汇票多余款收账通知怎么做记账凭证
  • 装卸收入的增值税税率是多少
  • 公司前期没有收入开支怎么记账
  • 企业公车私用如何处理
  • 公户买理财产品怎么做账
  • 总分机构如何做账
  • 实务操作中的税会差异有哪些?
  • 税务三方协议一式几份
  • 把股份转给别人怎么处理
  • 接受政府无偿划拨固定资产税务处理
  • 地铁充值发票会透露个人账户信息吗
  • 员工饭卡充值是哪个部门做
  • 个人使用过的设备有哪些
  • 费用转入本年利润
  • 支付拆迁补偿款做账
  • 无发票的费用怎么处理
  • mac切换不了中文怎么回事
  • 缴纳的权利许可有哪些
  • win11如何添加快捷方式
  • 稿酬所得计入什么科目
  • php function函数的用法
  • 简单实现php留言功能
  • 狗能看懂的电视
  • 房产税缴纳时间点
  • 企业所得税季报资产总额怎么填
  • 银行的社保缴费基数好高啊
  • 金蝶软件资产负债表公式设置
  • 客户的赔偿金会计分录
  • ps索引工具怎么用
  • mysql的命名规则
  • mongodb 教程
  • 已申报的财务报表可以修改吗
  • 出口关税的计算公式
  • mysql drop from
  • 公司内部的往来款用什么表格怎么做账
  • 2021年村级财务管理要点
  • 顺流交易和逆流交易会计分录
  • 去年的分红奖金是多少
  • 企业间拆借资金要交印花税吗
  • 政府补贴专项资金补贴开发票
  • 什么是限制性股票激励
  • 虚增利润怎么调整
  • 小规模纳税人收入不能超过多少
  • 其他应收款如何计提坏账准备
  • 存货盘亏进项税额转出会计分录
  • sql server重新安装步骤
  • fedora修改ip地址
  • 电脑安装win8
  • win8无法连接wifi
  • linux mount -o remount
  • win7专业版系统镜像
  • jetcar.exe - jetcar是什么进程 有什么作用
  • qqlogin.exe是什么进程 qqlogin.exe应用程序错误解决办法
  • win8程序无响应频繁
  • 宏基win8改win7
  • nodejs实战教程
  • node js并发加载缓慢
  • nodejs遍历json数据
  • js快速生成数组
  • linux 中的atq命令
  • iphone触控手势
  • node.js下载安装教程
  • javascript面向对象编程指南
  • python包含指定内容的字符串
  • jquery获取单选按钮的值
  • jquery原理和实现步骤
  • python dict.get()和dict['key']的区别详解
  • 如何在广东省电子税务局开发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设