LeetCode | 622. 设计循环队列

LeetCode | 622. 设计循环队列

OJ链接

在这里插入图片描述

思路:

  • 我们这里有一个思路:

  • 插入数据,bank往后走

在这里插入图片描述

  • 删除数据,front往前走

在这里插入图片描述

  • 再插入数据,就循环了

在这里插入图片描述

  • 那上面这个方法可行吗?

怎么判断满,怎么判断空?
这样是不是比较难


  • 我们下面有一个好的方法,就是多开一个空间

下面是我们的结构体的定义

typedef struct {int* a;int front;int back;int k;
} MyCircularQueue;

初始化

  • 这里的初始化就是给a空间开了k+1个大小
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->a = (int*)malloc(sizeof(int) * k + 1);obj->front = obj->back = 0;obj->k = k;return obj;
}

判空

  • 我们这里先来看判空
  • 当我们的头尾相等了就说明是空

在这里插入图片描述

bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->front == obj->back;
}

判满

在这里插入图片描述

bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->back + 1) % (obj->k + 1) == obj->front;
}

入队

在这里插入图片描述

bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj))return false;obj->a[obj->back] = value;obj->back++;obj->back %= (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;return obj->a[obj->front];
}

取队尾

在这里插入图片描述

int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;//可以这样写//if(obj->back == 0)//return obj->a[obj->k];//else//return obj->a[obj->back-1];return obj->a[(obj->back-1+obj->k+1)%(obj->k+1)];
}

销毁队列

void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}

完整的代码实现

typedef struct {int* a;int front;int back;int k;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->a = (int*)malloc(sizeof(int)*(k+1));obj->front = obj->back = 0;obj->k = k;return obj;
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->front == obj->back;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->back+1)%(obj->k+1) == obj->front;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj))return false;obj->a[obj->back] = value;obj->back++;obj->back %= (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;return obj->a[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;return obj->a[(obj->back-1+obj->k+1)%(obj->k+1)];
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模电知识点总结(二)二极管

系列文章目录 文章目录 系列文章目录二极管二极管电路分析方法理想模型恒压降模型折线模型小信号模型高频/开关 二极管应用整流限幅/钳位开关齐纳二极管变容二极管肖特基二极管光电器件光电二极管发光二极管激光二极管太阳能电池 二极管 硅二极管:死区电压&#xf…

今年注册电气工程师考试乱象及就业前景分析

1、注册电气工程师挂靠价格 # 2011年以前约为5万一年,2011年开始强制实施注册电气执业制度,证书挂靠价格开始了飞涨,2013年达到巅峰,供配电15万一年,发输变电20-25万一年,这哪里是证书,简直就是…

Docker kill 命令

docker kill:杀死一个或多个正在运行的容器。 语法: docker kill [OPTIONS] CONTAINER [CONTAINER...]OPTIONS说明: -s:向容器发送一个信号 描述: docker kill子命令会杀死一个或多个容器。容器内的主进程被发送S…

C语言数组的距离(ZZULIOJ1200:数组的距离)

题目描述 已知元素从小到大排列的两个数组x[]和y[], 请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离 。 输入:第一行为两个整数m, n(1≤m, n≤1000),分别代表数组f[], g[]的长度。第二行有m个元素&a…

如何在Simulink中使用syms?换个思路解决报错:Function ‘syms‘ not supported for code generation.

问题描述 在Simulink中的User defined function使用syms函数,报错simulink无法使用外部函数。 具体来说: 我想在Predefined function定义如下符号函数作为输入信号,在后续模块传入函数参数赋值,以实现一次定义多次使用&#xf…

014:MyString

题目 描述 补足MyString类&#xff0c;使程序输出指定结果 #include <iostream> #include <string> #include <cstring> using namespace std; class MyString {char * p; public:MyString(const char * s) {if( s) {p new char[strlen(s) 1];strcpy(p,…

最小二乘线性回归

​ 线性回归&#xff08;linear regression&#xff09;&#xff1a;试图学得一个线性模型以尽可能准确地预测实际值的输出。 以一个例子来说明线性回归&#xff0c;假设银行贷款会根据 年龄 和 工资 来评估可放款的额度。即&#xff1a; ​ 数据&#xff1a;工资和年龄&…

python将模块进行打包

模块名称为&#xff1a;my_module 目录结构&#xff1a; my_modulemy_module__init__.pymy_module_main.pysetup.pypython setup.pu sdist bdist_wheel生成tar.gz包和whl文件用于安装 """ python setup.py sdist bdist_wheel """from setuptoo…

LeeCode前端算法基础100题(2)- 最多水的容器

一、问题详情&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;…

案例025:基于微信小程序的移动学习平台的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

[C++历练之路]优先级队列||反向迭代器的模拟实现

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; 在C的宇宙中&#xff0c;优先队列似乎是一座巨大的宝库&#xff0c;藏匿着算法的珍宝。而就在这片代码的天空下&#xff0c;我们不仅可以探索优先队列的神奇&#xff0c;还能够揭开反向迭…

shutil和fileinput模块:文件操作的最佳实践

在Python中&#xff0c;shutil和fileinput模块是处理文件和输入/输出(I/O)操作的有力工具。shutil模块提供了一种在Python中操作文件的高级接口&#xff0c;而fileinput模块则允许我们轻松地读取多个输入流。 shutil模块 shutil模块是Python的标准库之一&#xff0c;提供了很…

【【Linux系统下常用指令学习 之 二 】】

Linux系统下常用指令学习 之 二 文件查询和搜索 文件的查询和搜索也是最常用的操作&#xff0c;在嵌入式 Linux 开发中常常需要在 Linux 源码文件中查询某个文件是否存在&#xff0c;或者搜索哪些文件都调用了某个函数等等。 1、命令 find find 命令用于在目录结构中查找文件…

BUUCTF [ACTF新生赛2020]outguess 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 下载附件&#xff0c;得到一堆文件。 解题思路&#xff1a; 1、根据题目和flag.txt文件提示&#xff0c;猜测为outguess隐写。 outguess下载安装 kail 终端命…

数字乡村:科技赋能农村产业升级

数字乡村&#xff1a;科技赋能农村产业升级 数字乡村是指通过信息技术和数字化手段&#xff0c;推动农业现代化、农村经济发展和农民增收的一种新模式。近年来&#xff0c;随着互联网技术的飞速发展&#xff0c;数字乡村开始在全国范围内迅速兴起&#xff0c;为乡村经济注入了新…

leedcode 刷题 - 除自身以外数组的乘积 - 和为 K 的子数组

I238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在…

AdaBoost提升分类器性能

目录 AdaBoost算法原理 AdaBoost工作详情 初始权重分配 第一轮 第二轮 后续轮次 最终模型 AdaBoost的API解释 AdaBoost 对房价进行预测 AdaBoost 与决策树模型的比较 结论 AdaBoost算法原理 在数据挖掘中&#xff0c;分类算法可以说是核心算法&#xff0c;其中 Ada…

gitee推荐-PHP面试准备的资料

该内容为giee项目。PHP-Interview: 这个项目是自己准备PHP面试整理的资料。包括PHP、MySQL、Linux、计算机网络等资料。方便自己以后查阅&#xff0c;会不定期更新&#xff0c;欢迎提交pr&#xff0c;如果错误&#xff0c;请指出&#xff0c;谢谢 在线预览地址&#xff1a;Intr…

leetcode面试经典150题——31 无重复字符的最长子串(方法二极简代码!!!)

题目&#xff1a; 无重复字符的最长子串 描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 leetcode链接 方法…

【LeetCode刷题笔记】DFSBFS(三)

图的基础知识 邻接矩阵是一个二维表,其中横纵坐标交叉的格子值为 1 的表示这两个顶点是连通的,否则是不连通的。