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

  • 接种加强针健康码会显示吗(接种加强针健康码有钻石)

    接种加强针健康码会显示吗(接种加强针健康码有钻石)

  • 手机wps怎么自动生成目录页呢(手机wps怎么自动生成目录)

    手机wps怎么自动生成目录页呢(手机wps怎么自动生成目录)

  • 苹果如何设置下载不需要输入ID密码(苹果如何设置下拉列表内容)

    苹果如何设置下载不需要输入ID密码(苹果如何设置下拉列表内容)

  • 钉钉上如何看别人提交的作业(钉钉上如何看别人的手机号)

    钉钉上如何看别人提交的作业(钉钉上如何看别人的手机号)

  • 快手登不上去怎么回事(快手登不上去怎么办绑定了手机号)

    快手登不上去怎么回事(快手登不上去怎么办绑定了手机号)

  • ipv4和ipv6哪个网速快(ipv4与ipv6比较哪个更好)

    ipv4和ipv6哪个网速快(ipv4与ipv6比较哪个更好)

  • 拼多多砍单是怎么回事(拼多多砍单怎么提示)

    拼多多砍单是怎么回事(拼多多砍单怎么提示)

  • 套条内存和2个单条有区别吗(内存套条能不能单用)

    套条内存和2个单条有区别吗(内存套条能不能单用)

  • oppo手机锁屏一直出现广告怎么办(oppo手机锁屏一直换图片)

    oppo手机锁屏一直出现广告怎么办(oppo手机锁屏一直换图片)

  • 华为mate305g是双模吗(华为mate30 5g双卡双待吗)

    华为mate305g是双模吗(华为mate30 5g双卡双待吗)

  • 华为p10怎么打开屏幕朗读器(华为p10怎么打开任务窗口)

    华为p10怎么打开屏幕朗读器(华为p10怎么打开任务窗口)

  • 手机信号栏上的HD是什么意思(手机信号栏上的HD怎么关闭)

    手机信号栏上的HD是什么意思(手机信号栏上的HD怎么关闭)

  • word添加目录(怎么给word添加目录)

    word添加目录(怎么给word添加目录)

  • set协议的内容(set协议的主要特点)

    set协议的内容(set协议的主要特点)

  • 路由器的电源是哪个(路由器的电源是哪根线)

    路由器的电源是哪个(路由器的电源是哪根线)

  • 安全密钥在哪里能找到(热点的安全密钥在哪里)

    安全密钥在哪里能找到(热点的安全密钥在哪里)

  • word表格怎么设置左右边距(word表格怎么设置外框线和内框线)

    word表格怎么设置左右边距(word表格怎么设置外框线和内框线)

  • 苹果拉黑电话在那里看(iphone拉黑号码在哪)

    苹果拉黑电话在那里看(iphone拉黑号码在哪)

  • 2345浏览器如何添加兼容性站点(2345浏览器如何升级)

    2345浏览器如何添加兼容性站点(2345浏览器如何升级)

  • 电信物联网卡apn设置(电信物联网卡apn设置成什么)

    电信物联网卡apn设置(电信物联网卡apn设置成什么)

  • 定位权限在哪里打开(定位权限在哪里设置)

    定位权限在哪里打开(定位权限在哪里设置)

  • 微软 Win11 22449.1000 版已将磁盘清理替换为新版“存储管理”(微软手机)

    微软 Win11 22449.1000 版已将磁盘清理替换为新版“存储管理”(微软手机)

  • php中页面跳转的方法(php跳转到指定网页代码)

    php中页面跳转的方法(php跳转到指定网页代码)

  • 电脑学习网2022年最新网易云音乐代挂刷分源码-每天300首-电脑学习网(学电脑的网站)

    电脑学习网2022年最新网易云音乐代挂刷分源码-每天300首-电脑学习网(学电脑的网站)

  • 国税地税合并是成功的还是失败的
  • 事业单位长期股权投资持有期间被投资单位
  • 服务业费用有哪些
  • 公司刚成立没有收入但是有支出怎么记账
  • 买车装具
  • 资源要素包括哪三个方面
  • 没收不还
  • 月末结转各项费用支出479000
  • 建筑行业机械租赁费计入什么科目
  • 教育协会发的证有用吗
  • 对方多开发票怎么处理
  • 跨年暂估收入如何调整
  • 对于税收会计记账科目应该如何设置?
  • 减免税款如何申报
  • 补计提以前年度增值税
  • 可以对开发票吗
  • 房租发票进项税额抵扣
  • 行政事业单位绿化工程完工应结转资产吗
  • 文件类型有几种分类
  • 增值税转出未交增值税是什么意思
  • 商业支付时使用
  • 常见的电脑系统类型
  • 员工伙食费明细表
  • 一年以上预收账款
  • 向分公司借款
  • 结转损益类收入账户的余额会计分录
  • 户外广告位怎么收费
  • echarts获取不到宽和高
  • 关于javascript
  • 错账是什么
  • 总部资产减值测试例题
  • 只有收据没有发票怎么报销
  • 租赁合同印花税率多少
  • php常见错误
  • 以摊余成本计量和以公允价值计量的区别
  • gpt40
  • php array_multisort 对数组进行排序详解及实例代码
  • 应收账款质押融资平台
  • 企业收到发票后怎么入账
  • 工会经费是什么凭证
  • 债券发行费用包括
  • 供货方代垫运费会计分录
  • 新成立的公司做广告如何写公司简介部分
  • dedecms源码
  • javascript 箭头
  • 企业生产过程中执行标准要把握好以下原则
  • 教大家8天学通MongoDB——第一天 基础入门篇
  • 土地增值税清算的条件
  • 合并报表少数股东权益是什么
  • 钢管租赁行业会计账务处理
  • 税控盘维护费每年都要交吗
  • sql模糊查询的关键字是什么
  • 留存收益的个别资本成本计算公式
  • 本年计算扣除限额的基数计算公式
  • 夏天单位发防暑茶
  • 技术服务费计入成本会计分录
  • 其他业务收入借贷方向表示
  • 公司自己制造设备怎么办
  • 场地租赁费属于什么税收分类编码
  • 新准则会计科目解释
  • 数据库的常用语句
  • u极速u盘装系统
  • QQPCTray.exe是什么进程 QQPCTray.exe文件介绍
  • Win7旗舰版系统安装
  • 如何关闭windows8的密码
  • win7系统找不到蓝牙设备
  • lua脚本语言零基础教程
  • 怪物掉落物品的获取方式
  • jquery 正则表达式
  • JQUERY的AJAX请求缓存里的数据问题处理
  • javascript函数的定义
  • 动感相册模板
  • 农产品核定扣除办法38号公告
  • 深圳税务局关于个体户开具普通发票有关问题的通知
  • 保险免保费是什么意思
  • 成都暖气费补贴
  • 内蒙古国税局官网
  • 政府收回土地条件
  • 岗位练兵的作用
  • 乳胶枕属于什么经营范围
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设