[数据结构]设计循环队列

ops/2025/3/6 9:00:20/

思路展示:

代码实现:

typedef struct {int *a;int front;int rear;int k;
} MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj);bool myCircularQueueIsFull(MyCircularQueue* obj);
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->front=obj->rear=0;obj->a=(int *)malloc(sizeof(int)*(k+1));obj->k=k;return obj;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj)){return false;}obj->a[obj->rear]=value;obj->rear++;obj->rear%=(obj->k+1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return false;}++obj->front;obj->front%=(obj->k+1);return true;
}int myCircularQueueFront(MyCircularQueue* obj)//取第一个元素
{if(myCircularQueueIsEmpty(obj)){return -1;}else{return obj->a[obj->front];}
}int myCircularQueueRear(MyCircularQueue* obj) {//return obj->a[obj->rear-1];  不能这样访问,如果这样访问那么当rear移动到开头那么rear-1就是-1就是越界访问了if( myCircularQueueIsEmpty(obj)){return -1;}else{return obj->a[(obj->rear-1+obj->k+1)%(obj->k+1)];//如果rear-1>0那么rear-1+k再模k是不变的}
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->front==obj->rear;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->rear+1)%(obj->k+1)==obj->front;
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}


http://www.ppmy.cn/ops/163556.html

相关文章

Adam优化器

目录 1. 核心思想 2. 数学原理 ​维护变量 ​参数更新规则 ​3. Adam 的关键改进 ​4. 优点 ​5. 缺点 ​6. 与其他优化器的对比 7. 实际应用场景 Adam(Adaptive Moment Estimation)​​ 是一种结合 ​动量(Momentum)​​…

Web Snapshot 网页截图 模块代码详解

本文将详细解析 Web Snapshot 模块的实现原理和关键代码。这个模块主要用于捕获网页完整截图,特别优化了对动态加载内容的处理。 1. 模块概述 snapshot.py 是一个功能完整的网页截图工具,它使用 Selenium 和 Chrome WebDriver 来模拟真实浏览器行为&am…

七、Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享)

Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享) Redis 以高性能和低延迟著称,但作为基于内存的数据库,内存管理是其核心问题之一。本文将深入解析 Redis 的内存模型、内存优化策略(包括 LRU/LFU 机制、对象共享等),帮助开发者提高 Redis 的存储效率和性能。 1…

本地部署pangolin获取谱系,从而达到预测新冠的流行趋势

步骤 1:安装Docker 注:此步骤忽略,可通过Docker官网对于文档进行安装,地址如下 Docker: Accelerated Container Application Developmenthttps://www.docker.com/ 步骤 2:拉取Pangolin镜像 docker pull staphb/pangolin:latest 步…

【AI神经网络与人脑神经系统的关联及借鉴分析】

AI神经网络与人脑神经系统的关联及借鉴分析 一、结构与功能模拟:从生物神经元到人工单元 生物神经元模型 人脑神经元通过电化学信号传递信息,当输入信号超过阈值时触发动作电位("全有或全无"法则)。其动态过程可用Hodg…

FFmpeg硬件编解码-C++

1、FFmpeg支持多种硬件加速类型,用于编解码视频,以提升性能和效率。以下是FFmpeg支持的主要硬件加速类型: NVIDIA NVENC/NVDEC:利用NVIDIA显卡进行视频编码(NVENC)和解码(NVDEC)。 …

kubectl 运行脚本 kubernetes 部署springcloud微服务 yaml + Dockerfile+shell 脚本

Dockerfile文件编写 #基础镜像,如果本地仓库没有,会从远程仓库拉取 openjdk:8 FROM openjdk:8 #暴露端口 EXPOSE 9301 #容器中创建目录 RUN mkdir -p /usr/local/java #编译后的jar包copy到容器中创建到目录内 ../../realize-gateway COPY realize-auth.…

Flutter的permission_handler插件检查iOS的通知权限不准确

今天,做好了一个功能,就是在app内检查用户有没有给当前APP打开通知权限, 如果没打开,就展示一个 banner ,让用户去点击banner去打开权限 。 android上测试得非常顺利, 结果, 在iOS 上就是不…