力扣题库设计循环队列

力扣题库设计循环队列题目要求 设计你的循环队列实现 循环队列是一种线性数据结构 其操作表现基于 FIFO 先进先出 原则并且队尾被连接在队首之后以形成一个循环 它也被称为 环形缓冲器 循环队列的一个好处是我们可以利用这个队列之前用过的空间 在一个普通队列里 一旦一个队列满了 我们就不能插入下一个元素 即使在队列前面仍有空间 但是使用循环队列 我们能使用这些空间去存储新的值 你的实现应该支持如下操作 MyC

题目要求:
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。

你的实现应该支持如下操作:

示例:

MyCircularQueue circularQueue = new MycircularQueue(3); // 设置长度为 3

circularQueue.enQueue(1); // 返回 true

circularQueue.enQueue(2); // 返回 true

circularQueue.enQueue(3); // 返回 true

circularQueue.enQueue(4); // 返回 false,队列已满

circularQueue.Rear(); // 返回 3

circularQueue.isFull(); // 返回 true

circularQueue.deQueue(); // 返回 true

circularQueue.enQueue(4); // 返回 true

circularQueue.Rear(); // 返回 4

typedef struct { 
    int* array; //数组 int n; // 数组空间大小 int front; // 队头 int rear; // 队尾 } MyCircularQueue; bool myCircularQueueIsFull(MyCircularQueue* obj); bool myCircularQueueIsEmpty(MyCircularQueue* obj); / Initialize your data structure here. Set the size of the queue to be k. */ MyCircularQueue* myCircularQueueCreate(int k) { 
    MyCircularQueue* cq = (MyCircularQueue*)malloc(sizeof(MyCircularQueue)); cq->array = (int*)malloc(sizeof(int)*(k+1)); cq->n = k+1; //空间开 k+1个,但只能存k个,开 k+1 是为了方便判满和判空 cq->front = 0; cq->rear = 0; return cq; } / Insert an element into the circular queue. Return true if the operation is successful. */ bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) { 
    if(myCircularQueueIsFull(obj)) //判满 return false; obj->array[obj->rear] = value; obj->rear++; //obj->rear %= obj->n; //方法一:取余 若尾超出则置0,实现了循环存储 if(obj->rear == obj->n) //方法二 obj->rear = 0; return true; } / Delete an element from the circular queue. Return true if the operation is successful. */ bool myCircularQueueDeQueue(MyCircularQueue* obj) { 
    if(myCircularQueueIsEmpty(obj)) //判空 return false; obj->front++; //删除后头前移 if(obj->front == obj->n) //当头删除到和大小相等时,头置0,实现循环存储 obj->front = 0; return true; } / Get the front item from the queue. */ int myCircularQueueFront(MyCircularQueue* obj) { 
    if(myCircularQueueIsEmpty(obj)) //判空 return -1; return obj->array[obj->front]; } / Get the last item from the queue. */ int myCircularQueueRear(MyCircularQueue* obj) { 
    if(myCircularQueueIsEmpty(obj)) //判空 return -1; int prevRear = obj->rear-1; //rear 在k+1处,但实际只存储到 k if(obj->rear == 0) //尾在0处的情况 prevRear = obj->n-1; return obj->array[prevRear]; } / Checks whether the circular queue is empty or not. */ bool myCircularQueueIsEmpty(MyCircularQueue* obj) { 
    return obj->front == obj->rear; //当头 == 尾 则为空 } / Checks whether the circular queue is full or not. */ bool myCircularQueueIsFull(MyCircularQueue* obj) { 
    int rearNext = obj->rear+1; rearNext %= obj->n; // 满时 rear == k+1 处,+1 再取余则 置0  return rearNext == obj->front; //此时 头 == 尾 则满 } void myCircularQueueFree(MyCircularQueue* obj) { 
    free(obj->array); free(obj); } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224537.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:43
下一篇 2026年3月17日 上午11:43


相关推荐

  • ppt导出pdf后非矢量图图片失真的解决办法

    ppt导出pdf后非矢量图图片失真的解决办法背景明明有了高清的图片,为什么导入PPT后图像反而模糊了?导出pdf后图片更是惨不忍睹?今天为了解决这个问题,我又折腾了一会儿。准备AdobeAcrobatproPPTPhotoZoom获得高清图片一般用别的软件导出图片可以调节格式分辨率,采用矢量图或者分辨率高的位图就可以,然而从网上获取的图片就没办法了。这时候你需要一款经久不衰的神器,PhotoZoom。他界面是这样的,可以方便的

    2022年6月5日
    117
  • VMware 虚拟机怎么识别不了ISO文件

    VMware 虚拟机怎么识别不了ISO文件1 安装虚拟光驱 装了就检测到了 进入虚拟光驱 就可以找到 ISO 镜像文件 直接运行就可以了 2 其实不装虚拟光驱也可以 可以用解压的方式进入 ISO 文件运行安装文件 3 镜像文件 要解析出来才能读取 装虚拟光驱只是为了解析 iso 文件 然后才能打开安装包 读取安装文件

    2025年12月8日
    5
  • mysql 提升tps_MYSQL的TPS优化

    mysql 提升tps_MYSQL的TPS优化1、摘要系统初期使用的是分布式微服务,但是所有业务模型都在同一个数据库实例上,数据库的压力会非常大,这时需要找出系统执行频率比较高的SQL,进行优化。这里重点描述定位问题的方法,使用的数据也都是测试环境数据。2、统计数据2.1、统计SQL执行次数showGLOBALstatuslike’Com_insert%’;showGLOBALstatuslike’Com_select%’…

    2022年10月20日
    8
  • 作为程序员,你真的刻意练习了吗

    点击上方☝Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章我真的刻意练习了吗刻意练习真的很重要,作为一名程序员,在读完这本书之后,也听了有关这本书的一些解读。有一些自己的感受。我是大四的下学期开始健身的,不到三个月的时间,能明显感觉到自己有了胸肌和腹肌。而在没有去健身房之前,平时也会去跑跑步,去操场上玩玩双杆,然后做几个引体向上,在宿舍也做几个俯卧撑,但是这些练…

    2022年2月28日
    55
  • idea上git提交忽略部分目录

    idea上git提交忽略部分目录idea上git提交忽略部分目录

    2022年4月24日
    251
  • PHPer面试指南-php 篇(二)「建议收藏」

    PHPer面试指南-php 篇(二)

    2022年2月11日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号