题海拾贝:力扣 622.设计循环队列

news/2025/2/2 2:41:54/

         Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

我的博客:<但凡.

我的专栏:《编程之路》、《数据结构算法之美》、《题海拾贝》

欢迎点赞,关注!

1、题目

 

2、题解 

typedef struct {int* arr;int front;//队头下标int rear;//队尾后一个元素下标//rear始终指向空白格子或可被覆盖int capacity;//最大容量//最大有效元素个数
} MyCircularQueue;//初始化
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* pq=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));pq->arr=(int*)malloc((k+1)*sizeof(int));//实际空间比capacity要多一个pq->capacity=k;pq->front=pq->rear=0;return pq;
}
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {if(obj->front==obj->rear){return true;}return false;
}
bool myCircularQueueIsFull(MyCircularQueue* obj) {if((obj->rear+1)%(obj->capacity+1)==obj->front){return true;}return false;
}
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {//考虑无法成功插入的情况,如果队列已满,则无法插入//用isFUll来检测是否满if( myCircularQueueIsFull(obj)){return false;}obj->arr[obj->rear++]=value;obj->rear %= obj->capacity+1;//防止rear指向数组外return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return false;}//队列保证先进先出//所以队头先出obj->front++;//front有可能会超出范围obj->front %= obj->capacity+1;return true;
}int myCircularQueueFront(MyCircularQueue* obj) 
{if(myCircularQueueIsEmpty(obj)){return -1;}return obj->arr[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return -1;}if(obj->rear==0){return obj->arr[obj->capacity];}else{return obj->arr[obj->rear-1];}
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->arr);obj->arr=NULL;free(obj);obj=NULL;
}/*** Your MyCircularQueue struct will be instantiated and called as such:* MyCircularQueue* obj = myCircularQueueCreate(k);* bool param_1 = myCircularQueueEnQueue(obj, value);* bool param_2 = myCircularQueueDeQueue(obj);* int param_3 = myCircularQueueFront(obj);* int param_4 = myCircularQueueRear(obj);* bool param_5 = myCircularQueueIsEmpty(obj);* bool param_6 = myCircularQueueIsFull(obj);* myCircularQueueFree(obj);
*/

        好了,今天的内容就分享到这,我们下期再见! 

 

 


http://www.ppmy.cn/news/1568577.html

相关文章

RAG:实现基于本地知识库结合大模型生成(LangChain4j快速入门#1)

引言 ⭐Tips&#xff1a; 你可以循序渐进从头看下去也可以选择直接跳到后面(快速入门)看代码和结果演示 场景解释以及适用场景 当我想让大模型能基于我私有化的一些本地知识进行回答&#xff0c;定制化特殊场景模型的时候&#xff0c;就可以用到这种方法。 示例1&#xff1a;…

在5G网络中使用IEEE 1588实现保持时间同步

本文主要探讨了在电信网络中实现保持时间同步&#xff08;holdover&#xff09;的不同方法。 文档讨论了保持时间同步的作用&#xff0c;以及它从传统SONET/SDH网络到现代5G移动通信网络的演变。传统SONET/SDH网络依赖于频率同步&#xff0c;而现代5G移动通信则依赖于使用IEEE…

单片机基础模块学习——DS18B20温度传感器芯片

不知道该往哪走的时候&#xff0c;就往前走。 一、DS18B20芯片原理图 该芯片共有三个引脚&#xff0c;分别为 GND——接地引脚DQ——数据通信引脚VDD——正电源 数据通信用到的是1-Wier协议 优点&#xff1a;占用端口少&#xff0c;电路设计方便 同时该协议要求通过上拉电阻…

第P7周-Pytorch实现马铃薯病害识别(VGG16复现)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 马铃薯病害数据集&#xff0c;该数据集包含表现出各种疾病的马铃薯植物的高分辨率图像&#xff0c;包括早期疫病、晚期疫病和健康叶子。它旨在帮助开发和…

SAP SD学习笔记27 - 请求计划(开票计划)之1 - 定期请求(定期开票)

上两章讲了贩卖契约&#xff08;框架协议&#xff09;的概要&#xff0c;以及贩卖契约中最为常用的 基本契约 - 数量契约和金额契约。 SAP SD学习笔记26 - 贩卖契约(框架协议)的概要&#xff0c;基本契约 - 数量契约_sap 框架协议-CSDN博客 SAP SD学习笔记27 - 贩卖契约(框架…

什么是波士顿矩阵,怎么制作?AI工具一键生成战略分析图!

当今商业环境瞬息万变&#xff0c;每个企业都面临着越来越多的挑战与机遇。如何科学合理地进行战略管理&#xff0c;成为了每个企业决策者必须直面的重要课题。 在众多战略管理框架中&#xff0c;波士顿矩阵作为一种经典的战略管理工具&#xff0c;因其简洁明了的分析方式而广…

Springboot如何使用面向切面编程AOP?

Springboot如何使用面向切面编程AOP? 在 Spring Boot 中使用面向切面编程&#xff08;AOP&#xff09;非常简单&#xff0c;Spring Boot 提供了对 AOP 的自动配置支持。以下是详细的步骤和示例&#xff0c;帮助你快速上手 Spring Boot 中的 AOP。 1. 添加依赖 首先&#xff…

Elasticsearch:如何搜索含有复合词的语言

作者&#xff1a;来自 Elastic Peter Straer 复合词在文本分析和标记过程中给搜索引擎带来挑战&#xff0c;因为它们会掩盖词语成分之间的有意义的联系。连字分解器标记过滤器等工具可以通过解构复合词来帮助解决这些问题。 德语以其长复合词而闻名&#xff1a;Rindfleischetik…