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

  • ppt怎么插入音乐(ppt怎么设置背景音乐从头到尾)

    ppt怎么插入音乐(ppt怎么设置背景音乐从头到尾)

  • 抖音私信发的视频怎么保存(抖音私信发的视频无法查看)

    抖音私信发的视频怎么保存(抖音私信发的视频无法查看)

  • 苹果手机安装不了第三方软件(苹果手机安装不了微信是怎么回事)

    苹果手机安装不了第三方软件(苹果手机安装不了微信是怎么回事)

  • iphone7拍照会一直抖动怎么办(苹果7拍照时画面一直抖动)

    iphone7拍照会一直抖动怎么办(苹果7拍照时画面一直抖动)

  • 雷电2接口有什么用(雷电2接口有什么作用)

    雷电2接口有什么用(雷电2接口有什么作用)

  • 华为手机有没有定位追踪功能(华为手机有没有红外线功能)

    华为手机有没有定位追踪功能(华为手机有没有红外线功能)

  • 网易uu手机跟电脑会员通用吗(手机网易uu和电脑网易uu)

    网易uu手机跟电脑会员通用吗(手机网易uu和电脑网易uu)

  • stdeva函数是什么意思(简述stdev函数的作用)

    stdeva函数是什么意思(简述stdev函数的作用)

  • 快手有关就回是什么意思(快手有关必回)

    快手有关就回是什么意思(快手有关必回)

  • xr面部识别一直显示移低一点(为什么xr面部识别经常用不了要输密码)

    xr面部识别一直显示移低一点(为什么xr面部识别经常用不了要输密码)

  • oppo a57是几g手机(oppoa57t几g手机)

    oppo a57是几g手机(oppoa57t几g手机)

  • 爱奇艺怎么找缓存视频(在爱奇艺里面缓存的内容在哪里?)

    爱奇艺怎么找缓存视频(在爱奇艺里面缓存的内容在哪里?)

  • 手机1小时耗电多少正常(手机1小时耗电多少)

    手机1小时耗电多少正常(手机1小时耗电多少)

  • 苹果以停用是什么意思(苹果已停用什么意思)

    苹果以停用是什么意思(苹果已停用什么意思)

  • 苹果手机时间不准怎么调(苹果手机时间不变)

    苹果手机时间不准怎么调(苹果手机时间不变)

  • 如何把微博的视频下载到手机(如何把微博的视频保存到手机没有三个小点)

    如何把微博的视频下载到手机(如何把微博的视频保存到手机没有三个小点)

  • shelper是什么软件(sheiper是什么软件)

    shelper是什么软件(sheiper是什么软件)

  • 拼多多可以发视频吗(拼多多可以发视频给客户吗)

    拼多多可以发视频吗(拼多多可以发视频给客户吗)

  • 签收但没收到货可以退款吗(邮政显示已签收但没收到货)

    签收但没收到货可以退款吗(邮政显示已签收但没收到货)

  • tim移动在线是什么意思(tim移动在线能收到消息吗)

    tim移动在线是什么意思(tim移动在线能收到消息吗)

  • 苹果蓝牙和安卓蓝牙能连吗(苹果蓝牙和安卓蓝牙能传照片吗)

    苹果蓝牙和安卓蓝牙能连吗(苹果蓝牙和安卓蓝牙能传照片吗)

  • 华为屏幕变黄怎么恢复(华为屏幕显示偏黄)

    华为屏幕变黄怎么恢复(华为屏幕显示偏黄)

  • vue3 + Tailwind Css + Vite 搭建快速开发前端样式环境

    vue3 + Tailwind Css + Vite 搭建快速开发前端样式环境

  • 国际重复征税的前提条件是
  • 公司出售旧汽车要交什么税
  • 费用挂账的会计分录怎么做
  • 没开发票的收入可以不入账吗
  • 外商投资企业如何注资
  • 资产负债表和利润表和现金流量表的关系
  • 怎么确认收到的钱是哪个项目的
  • 一般纳税人有什么优惠政策
  • 特定业务计算的应纳税所得额是什么意思
  • 技术服务发票怎么开 安全培训
  • 人工费用占销售收入比重
  • 精装房不同合同的区别
  • 哪些政府补助可以做收入
  • 委托加工业务流程图
  • 保税区内的货物交易
  • 限额领料单是一种多次使用的
  • 出纳电汇流程
  • 苹果的mac系统
  • 预测“叫停GPT-4后续AI大模型”后续:这是一个囚徒困境
  • 认缴出资额日期没有是什么意思
  • php实现基数排序函数
  • paddle!
  • phpfopen
  • 基于中国国情的中国式现代化具有哪些特色
  • 临时工的工资需要缴纳工会经费吗
  • 银装素裹的意思和造句
  • 我找到了这个
  • php中strstr
  • 计提城建税是在当月提吗
  • 手撕发票怎样盖章子
  • php分页思路
  • 从零开始作者
  • set_ccopt_property
  • 短信php源码
  • 企业所得税是填本年累计数吗
  • 募股方案
  • vue-echarts
  • 个人给境外公司付款
  • 买一赠一税务局答复
  • 四种股利分配政策及适用情况
  • 综合所得汇算清缴是什么意思
  • 单位全额承担社保能税前扣除吗
  • 工程施工和工程结算的账务处理
  • 房开企业会计分录
  • sqlserver233报错原因
  • 劳务外经证预缴税款
  • 短期贷款利息支付
  • 其他综合收益转入盈余公积和未分配利润
  • 原始凭证审核要点包括
  • 企业贷款受托支付如何收税
  • 工程在建工程转固清单
  • 办理契税所需要的证件
  • 资产减值准备怎么提
  • 劳务派遣公司工资发放方式
  • 教育局给幼儿园的补贴
  • 会计处理的步骤
  • 预计产品质量保证损失计入什么
  • 公司人事怎么办公积金提取流程?
  • sql查询包含特殊
  • sql基本教程
  • 文件历史版本功能
  • mac 邮箱
  • fedora gnome
  • win7系统鼠标右键无法弹出菜单
  • CentOS救援模式实验笔记详解
  • mac如何打印文件
  • linux系统加载网卡驱动
  • Linux Bash Shell入门教程
  • win7无法远程桌面win10
  • pe,翻译
  • 利用的拼音
  • jquery用什么编写
  • js接收excel文件流
  • 深度定制Python的Flask框架开发环境的一些技巧总结
  • android数据存储文件读写实验
  • 填了专项附加扣除但没有进行综合年度汇算
  • 长沙市社保中心主任
  • 南京税务举报
  • 财政资金存在问题
  • 代理记账代理记账价格
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设