当前位置: 首页 > news >正文

咸阳市住房和城乡建设局网站网站设计师

咸阳市住房和城乡建设局网站,网站设计师,我公司要网站建设,网站建设网站管理目录 【Leetcode622】设计循环队列 A.链接 B.题目再现 C.解法 【Leetcode622】设计循环队列 A.链接 设计循环队列 B.题目再现 C.解法 其实这题用数组或是链表都能解决,但是如果是用链表的话,那么队列为空的条件和队列满了的条件是一样的&#xff0…

 

目录

【Leetcode622】设计循环队列

A.链接

B.题目再现

 C.解法


【Leetcode622】设计循环队列

A.链接

设计循环队列

B.题目再现

 C.解法

其实这题用数组或是链表都能解决,但是如果是用链表的话,那么队列为空的条件和队列满了的条件是一样的,都为 front==rear,这样就无法判断,加个哨兵位的头节点可以解决这个问题,但是后面接口的实现又会很麻烦,所以这题还是推荐用数组实现

创建数组时,我们多开1个空间,也就是开 k+1 个空间

具体来说:

刚开始队列为空,所以 front==rear==0

1.插入数据时,在下标为 rear 的位置插入,然后rear++,为了防止下次插入数据时越界,rear还要模上 k+1 ;

当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;elsereturn 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))   //队列为满则返回falsereturn false;obj->arr[obj->rear++]=value;obj->rear%=(obj->k+1);    //防止 rear 加着加着就越界了return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) 
{if(myCircularQueueIsEmpty(obj))  //队列为空则返回falsereturn false;obj->front++;obj->front%=(obj->k+1);      //防止 front 加着加着就越界了return true;
}int myCircularQueueFront(MyCircularQueue* obj) 
{if(myCircularQueueIsEmpty(obj))   //队列为空则返回-1return -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);
}

🐲👻这循环队列的讲解就到这里了,若有错误或是建议欢迎小伙伴们指出。🐯🤖

🥰🤩希望小伙伴们可以多多支持博主哦。😍😃

😁😄谢谢你的阅读。😼😸

 

http://www.mmbaike.com/news/98470.html

相关文章:

  • 网站服务器是什么东西app推广渠道有哪些
  • 有关网站建设的毕业设计免费b站推广短视频
  • 中山快速做网站价格个人网站源码免费下载
  • 网站免费源码大全无用下载网络营销教学网站
  • 怎样在网站上做销售十大经典营销案例
  • 网站改版建设主要搜多多搜索引擎入口
  • 政府网站图解怎么做如何做网页链接
  • 海外网红营销平台长沙弧度seo
  • 自己开发app怎么赚钱广州网站优化关键词排名
  • 山西网站建设价格徐州seo
  • 专做sm的网站网络广告的形式有哪些?
  • 淮北网站设计产品推广方式
  • 做线上网站需要钱吗中央下令全国各地核酸检测
  • 网站建设对接模版个人免费建站软件
  • 网站名称怎么起好听网站转让出售
  • 公司手机版网站制作公众号引流推广平台
  • 天津去山西高铁做哪个网站网站服务器速度对seo有什么影响
  • 工商服务网怎么优化电脑系统
  • 泰安做网站建设的公司四年级摘抄一小段新闻
  • 做网站什么商品好seo内部优化包括哪些内容
  • wordpress自定后台无锡整站百度快照优化
  • 做的烂的大网站百度排名优化咨询电话
  • 做网站是不是要学编程淘宝关键词搜索排行榜
  • 网站数据库如何做电商运营公司
  • c2c网站管理系统企拓客软件怎么样
  • 台州网站建设系统哪些广告平台留号码
  • aspcms做双语网站修改配置百度一下首页百度
  • 上海做网站哪里有seo简单速排名软件
  • 电商网站页面网站制作的基本流程
  • 教人做甜品的网站小红书搜索关键词排名