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

  • vivos6的实时网速如何显示(vivo实时网速在哪里打开)

    vivos6的实时网速如何显示(vivo实时网速在哪里打开)

  • 淘宝两个钻石是多少信誉(淘宝两个钻石是几心)

    淘宝两个钻石是多少信誉(淘宝两个钻石是几心)

  • 没有连接wifi怎么登录路由器(没有连接wifi怎么查看ip地址)

    没有连接wifi怎么登录路由器(没有连接wifi怎么查看ip地址)

  • 小爱音箱唤醒词修改(小爱音箱唤醒词 小爱同学更改唤醒名称)

    小爱音箱唤醒词修改(小爱音箱唤醒词 小爱同学更改唤醒名称)

  • 手机qq背景是黑色怎么变成白色(手机qq背景黑色怎么恢复白色)

    手机qq背景是黑色怎么变成白色(手机qq背景黑色怎么恢复白色)

  • word怎么把行改成磅(word怎么把行改为磅)

    word怎么把行改成磅(word怎么把行改为磅)

  • 好评后的追评怎么删掉(好评的追评怎么删除或撤回)

    好评后的追评怎么删掉(好评的追评怎么删除或撤回)

  • 抖音被限流还要不要发作品(抖音被限流了需要申诉吗?)

    抖音被限流还要不要发作品(抖音被限流了需要申诉吗?)

  • 英特尔和酷睿什么区别(英特尔酷睿什么关系)

    英特尔和酷睿什么区别(英特尔酷睿什么关系)

  • 扩展wifi是什么意思(扩展wlan有什么用)

    扩展wifi是什么意思(扩展wlan有什么用)

  • 华为atu一tl10是什么型号(华为atu一tl10多少钱一部)

    华为atu一tl10是什么型号(华为atu一tl10多少钱一部)

  • 支付宝这边登录那边会下线吗(支付宝登录操作)

    支付宝这边登录那边会下线吗(支付宝登录操作)

  • 苹果x闹钟声音设置在哪(苹果x闹钟声音越来越小)

    苹果x闹钟声音设置在哪(苹果x闹钟声音越来越小)

  • word怎么设置页眉边距(word怎么设置页面纸张大小)

    word怎么设置页眉边距(word怎么设置页面纸张大小)

  • 红米2016101是什么型号(红米手机型号2016112)

    红米2016101是什么型号(红米手机型号2016112)

  • word怎么让页码连续(word怎么让页码从指定页开始)

    word怎么让页码连续(word怎么让页码从指定页开始)

  • mate20开启无线充电(华为mate20怎么无线充)

    mate20开启无线充电(华为mate20怎么无线充)

  • 滴滴深夜服务是几点到几点(滴滴深夜服务价格)

    滴滴深夜服务是几点到几点(滴滴深夜服务价格)

  • 淘宝怎么看关注店铺的直播(淘宝怎么看关注的主播)

    淘宝怎么看关注店铺的直播(淘宝怎么看关注的主播)

  • par一tl20是什么型号(par|s是什么意思)

    par一tl20是什么型号(par|s是什么意思)

  • 台式机怎么连接wifi(台式机怎么连接蓝牙耳机)

    台式机怎么连接wifi(台式机怎么连接蓝牙耳机)

  • 0pp0r17怎样投屏(oppor17手机投射屏幕教程)

    0pp0r17怎样投屏(oppor17手机投射屏幕教程)

  • 时间限额怎么取消(怎么把时间限额去了)

    时间限额怎么取消(怎么把时间限额去了)

  • 苹果电话通讯录怎么全删除(苹果电话通讯录怎么转移到新手机)

    苹果电话通讯录怎么全删除(苹果电话通讯录怎么转移到新手机)

  • 无需命令行,这款小工具可以帮你在 Win11 上傻瓜式安装安卓 App(不用命令打开组策略)

    无需命令行,这款小工具可以帮你在 Win11 上傻瓜式安装安卓 App(不用命令打开组策略)

  • Windows11怎么查询tpm版本?Windows11查询tpm版本教程(windows11怎么查询激活时间)

    Windows11怎么查询tpm版本?Windows11查询tpm版本教程(windows11怎么查询激活时间)

  • 微信小程序下拉刷新(微信小程序下拉菜单怎么做)

    微信小程序下拉刷新(微信小程序下拉菜单怎么做)

  • 缴纳增值税账务处理
  • 出口退税的条件有哪些
  • 小规模纳税人取得专票和普票区别
  • 废品销售是否缴纳增值税
  • 税款必须要15号之前交吗
  • 个税扣除项生效日期
  • 农民工工资专户管理暂行办法
  • 减半征收附加税会计分录
  • 用自产货物用抵债交换是否视同销售
  • 担保费能抵扣吗
  • 不可修复废品损失会计分录
  • 公司年底奖金怎么算
  • 安全费用支出范围包括
  • 已认证未入账的分录
  • 事业单位过节发东西
  • 入库前的挑选整理费用计入采购成本吗
  • 公司和个人大额往来怎么办
  • 多缴纳的印花税退回来怎么做分录
  • 房地产土地成本计算公式
  • 研发的样机属于固定资产吗
  • 电子发票怎么开具流程
  • 个人交社保可以交生育险吗
  • 折扣销售怎么确认
  • 利息调整摊销额等于什么
  • m1 mac 恢复出厂
  • 王者荣耀中白起的台词
  • 如何安装电脑系统win7电路连接
  • 为什么打开Win10虚拟器后一直在界面
  • Apache+php+mysql在windows下的安装与配置图解(最新版)
  • php数组函数题目
  • 企业租房费用可以计入成本吗
  • 成本法转为权益法例题
  • 前端大屏常用的输入法
  • 公司未成立,发起人的责任
  • 事业单位接受捐赠固定资产入账
  • 森林抗锯齿
  • 高新企业技术服务成本核算
  • 微信小程序登录后端
  • php -r
  • php实现的加密解决方案
  • 营业额500万算什么企业
  • element-ui tree
  • swiper插件使用步骤
  • waffe
  • python大作业小游戏
  • seq命令
  • 商品咨询服务包含什么
  • 个税累积税阶
  • Python中自定义异常
  • 给境外公司代扣代缴税款
  • SQLServer 2008 Merge语句的OUTPUT功能
  • sqlserver数据库事务
  • 购买软件多少钱进无形资产
  • 进项税额有留底怎么做分录
  • 存货盘点的方法有哪些
  • 开具成品油发票时注意事项是?
  • 盈利赢利营利手机文章
  • 应付职工薪酬如何进行会计处理
  • 母公司给子公司担保
  • 没有发票也可以报销
  • 材料报废 开什么发票
  • 本单位职工可以在本单位兼职吗
  • 稳岗补贴会计分录怎么做,需要缴纳企业所得税不
  • 施工企业应收账款周转率多少合适
  • 什么叫归集和分配
  • redhat rhca
  • win7系统宽带连接651
  • 一句命令
  • win7系统如何创建管理员账户
  • WinXP老显示器CRT显示器严重闪屏的修复方法
  • windows移动中心有什么用
  • win7系统怎么设置电源
  • w7提高开机速度
  • win7进入dos的方法
  • Bullet(Cocos2dx)之优化PhysicsDraw3D
  • 基于jPlayer三分屏的制作方法
  • vue scoped属性作用?实现原理
  • 研发费用加计扣除75%还是100%
  • 货车附加费多少钱
  • 为什么有的企业在企查查上查不到
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设