622.设计循环队列

在这里插入图片描述
在这里插入图片描述

typedef struct {
    int* a;
    int head;
    int tail;
    int k;
} MyCircularQueue;

bool myCircularQueueIsEmpty(MyCircularQueue* obj);
bool myCircularQueueIsFull(MyCircularQueue* obj);



//初始化
MyCircularQueue* myCircularQueueCreate(int k) {
    MyCircularQueue* obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));

    obj->a=(int*)malloc(sizeof(int)*(k+1));
    obj->head=0;
    obj->tail=0;
    obj->k=k;

    return obj;
}
//放入数据
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
    if(myCircularQueueIsFull(obj))
        return false;

    obj->a[obj->tail]=value;
    obj->tail++;
    (obj->tail)%=(obj->k+1);
    return true;
}
//删前面的数据置空
bool myCircularQueueDeQueue(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return false;

    ++obj->head;

    obj->head%=(obj->k+1);
    return true;
}
//取头
int myCircularQueueFront(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return -1;
    else
        return obj->a[obj->head];
}
//取尾
int myCircularQueueRear(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return -1;
    else
        return obj->a[(obj->tail+obj->k)%(obj->k+1)];

}
//判空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
    return obj->head==obj->tail;
}
//判满
bool myCircularQueueIsFull(MyCircularQueue* obj) {
    return (obj->tail+1)%(obj->k+1)==obj->head;
}
//释放
void myCircularQueueFree(MyCircularQueue* obj) {
    free(obj->a);
    free(obj);
}

/**
 * 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);
*/

循环队列就是在有限空间保证先进先出,重复使用
在这里插入图片描述
我们在这里定义两个指针,一个队头指针head和一个队尾指针tail都指向队头。当放入数据时(push),tail指针++并且指向放入元素的下一个位置。当删去数据时(pop),直接移动head让head++就删去了。但是这里有一个问题,一开始head=tail为空当随着往下进行的时候,head=tail为满。

所以我们这里多开一个空间,开k+1个空间但是只放进k个元素。

在这里插入图片描述
创建一个结构体把,头指针和尾指针还有整个数组以及元素个数管理起来。

在这里插入图片描述
开k+1个空间,但是只放进k个元素。

在这里插入图片描述
在这里插入图片描述

判空:当在这种情况下时,head和tail相等时只会是在为空的时候。所以判空时,只需判断head是否等于tail。
判满:结合上图,当元素放满时,tail的下一个位置就是head,根据取模得到关系(tail+1)%(k+1)==head
在这里插入图片描述
先判断是否为满,在tail指针处放入值然后让tail++往后走。因为是循环队列要注意tail到最后时要形成循环队列,所以tail指针要返回去。
在这里插入图片描述
头指针往后走删除数据,走到最后也要返回去。
在这里插入图片描述
取头:如果为空就返回-1,否则返回头指针的节点。
取尾:这里还有另外一种写法,如果tail为0也就是放满了tail又循环回来了,此时取下标为k位置的数。如果是正常情况就取tail-1。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/648136.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARM+FPGA+NVIDIA AI摄像头软硬件定制

拥有资深ISP图像技术团队,是英伟达、地平线等合作伙伴,我们的团队掌握目前市面上大部分车载平台的ISP图像画质服务能力,能自主开发图像ISP和增强算法。我们具有多名经验丰富光学设计专家,掌握车载模组光学设计能力,资深…

Mac上如何安装低版本chrome浏览器

背景 为了排查项目上使用chrome低版本的兼容性问题,需要在本机【mac系统】上安装一个低版本的chrome浏览器。 不同版本的chrome下载地址 https://www.slimjet.com/chrome/google-chrome-old-version.php 下载后要记得你下载的旧版本的版本号,后面修改…

Neural Filters:着色

Ps菜单:滤镜/Neural Filters/颜色/着色 Neural Filters/COLOR/Colorize 着色 Colorize滤镜可以对黑白照片自动着色,也为彩色照片简化色彩提供了有力的支持。 “着色”滤镜利用深度学习技术,对输入的黑白或彩色照片进行分析,识别图…

【云原生】kubernetes声明式管理-----YAML文件

目录 引言 一、声明式管理简介 (一)什么是声明式管理 (二)支持格式 二、YAML文件 (一)YAML文件基本格式 (二)YAML文件实践 三、YAML文件创建方式 (一&#xff0…

rk3568_spinlock

文章目录 前言1、spinlock是什么?2、自旋锁实验2.1源码2.2 结果图总结前言 本文记录在rk3568开发板做的自旋锁实验。通过自旋锁控制state变量来限制只有一个应用程序来打开驱动设备。 1、spinlock是什么? spinlock称为自旋锁,如果获取不到资源,就只能一直傻傻地等待资源被…

B树与B+树区别

B树和B树是常见的数据库索引结构,都具有相较于二叉树层级较少,查找效率高的特点,它们之间有以下几个主要区别: 1.节点存储数据的方式不同 B树的叶子结点和非叶子节点都会存储数据,指针和数据共同保存在同一节点中B树…

一文教你使用stream流轻松解决java项目数据枚举显示问题

本篇文章主要讲解java枚举、vo实体类通过stream流形式输出枚举参数的方法。 日期:2024年5月26日 作者:任聪聪 本文代码实例附件:https://download.csdn.net/download/hj960511/89361611 实际效果 可以看到在枚举参数的基础上,我们…

这或许是国产游戏出海的最佳时机

《刺客信条:影》过于政治正确的选角激怒了全球玩家,而社交媒体上有玩家讨论育碧是否应该因为刻意加入DEI(多元化)而延期《刺客信条:影》时,没想到这得到了X拥有人埃隆马斯克的回复。马斯克表示“DEI&#x…

【Chrono Engine学习总结】6-创建自定义场景-6.2-chrono中的光线设置

由于Chrono的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。 上一篇文章中,自己【用sketchup重建了三维场景】,但导入chrono中颜色很不正确,几乎都是白色的,但也不是完全白色。经过…

宿舍管理系统代码详解(操作界面)

目录 一、前端代码 1.样式展示 2.代码详解 <1>主页面列表部分 &#xff08;1&#xff09;template部分 &#xff08;2&#xff09;script部分 <2>新增页面 &#xff08;1&#xff09;template部分 &#xff08;2&#xff09;script部分 <3>修改页面…

Mongodb介绍及springboot集成增删改查

文章目录 1. MongoDB相关概念1.1 业务应用场景1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 2. docker安装mongodb3. springboot集成3.1 文件结构3.2 增删改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查询3.2.5 删除 1. MongoDB相关概念 1.1 业务…

vue3快速入门(局部使用)

目录 前置知识JavaScript-导入导出 入门操作 变量渲染页面 局部使用vue的实现步骤 vue指令 v-for v-bind v-if v-show v-on v-model 生命周期 前置知识JavaScript-导入导出 正常情况在html导入js文件是全部导入&#xff0c;这样会导致性能上的损失 。 JS提供的…

上位机图像处理和嵌入式模块部署(f103 mcu运行freertos)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 mcu一般有两个用途,一个是控制,一个是非控制。控制类的应用一般要求实时性比较高,什么时候做什么,都是有严格的时间要求的。而非控制类的应用,则要求实现尽可能多的功能,比如…

构建智慧城市公共服务系统的功能架构设计

随着城市化进程的加速&#xff0c;城市公共服务系统在保障居民生活品质、提升城市管理水平方面扮演着愈发重要的角色。构建智慧城市公共服务系统的功能架构设计至关重要&#xff0c;它不仅需要充分考虑居民需求与城市管理的实际情况&#xff0c;还需要整合先进的科技手段&#…

冷冻式压缩空气干燥机常见几种系统原理图

冷冻式压缩空气干燥机 我们以两种典型的设计流程图为例 1.干式蒸发型&#xff0c;这类冷干机是我们最为常见的设计型式。下图为deltech公司的典型流程图 此类设备各家设计不同的最大区别基本就是在换热器的结构型式上有比较大的区别。换热器主要有&#xff1a;管壳式、铝板换、…

echarts饼图图例右侧纵向排列

如图所示&#xff0c;一开始&#xff0c;我设置了图例的right和top值&#xff0c;还有orient&#xff0c;但图例始终不能纵向排成一排&#xff0c;要么上面两个一行&#xff0c;要么最后两个一行&#xff0c;最后我发现同时设置一下left的值就可以了&#xff0c;如下所示&#…

51单片机-实机演示(按键)

书接上回。http://t.csdnimg.cn/4wSSW 目录 一.按下灭&#xff0c;松开亮 二.两个按键控制两个灯 三.点一下灯开&#xff0c;在按一下关 四。优化按键消抖 1.加入bit变量 一.按下灭&#xff0c;松开亮 代码 #include <reg52.h> //此文件中定义了单片机的一些特…

关于Iterator 和ListIterator的详解

1.Iterator Iterator的定义如下&#xff1a; public interface Iterator<E> {} Iterator是一个接口&#xff0c;它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口如下&#xff1a; forEachRemaining(Consumer<? super E> act…

Android Studio开发之路(十三)主题影响Button颜色问题解决及button自定义样式

一、问题描述 在开发过程中发现安卓的默认主题色是紫色&#xff0c;并且会导致button也是紫色&#xff0c;有时直接在xml布局文件中直接设置button的背景色或者设置背景图片不起效果 方案一、如果是app&#xff0c;可以直接设置主题颜色 比如&#xff0c;将主题设置为白色&a…

GNSS的经纬度使用float还是doubble数据类型存储传输?

1. 背景 当你在使用导航、打车、定位等等场景下&#xff0c;一定会有形或者无形的使用位置服务&#xff0c;位置服务的基础功能功能就是向你提供位置信息&#xff0c;而经纬度是位置信息的主要信息&#xff0c;一般情况可以简单的认为位置信息就是经纬度信息。经纬度使用小数进…