设计循环队列(队列oj)

1.设计循环队列

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

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

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

  • MyCircularQueue(k): 构造器,设置队列长度为 k 。
  • Front: 从队首获取元素。如果队列为空,返回 -1 。
  • Rear: 获取队尾元素。如果队列为空,返回 -1 。
  • enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
  • deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
  • isEmpty(): 检查循环队列是否为空。
  • isFull(): 检查循环队列是否已满。

示例:

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

代码实现:

重点:判断队列为空还是满,对取模的应用

思路:数组,构造大小为K+1的数组,(obj->head == obj->rear)为空, 

(obj->rear + 1) % (obj->k + 1) == obj->head)为满

具体实现:

typedef int QueueDataType;typedef struct {QueueDataType* value;int head;int rear;int k;
} MyCircularQueue;//初始化 
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* queue = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));QueueDataType* tmp = (QueueDataType*)malloc((k + 1) * sizeof(QueueDataType));if (tmp == NULL) {perror("myCircularQueueCreate:malloc");exit;}queue->value = tmp;return queue;
}
//入队列
bool myCircularQueueEnQueue(MyCircularQueue* obj, QueueDataType value) {assert(obj);if (!myCircularQueueIsFull(obj)) {obj->value[obj->rear] = value;obj->rear++;obj->rear %= obj->k + 1;return true;}return false;
}
//出队列
bool myCircularQueueDeQueue(MyCircularQueue* obj) {assert(obj);if (myCircularQueueIsEmpty(obj)) {return false;}obj->head++;obj->head %= obj->k + 1;return true;
}
//获取队列顶部元素
int myCircularQueueFront(MyCircularQueue* obj) {if (myCircularQueueIsEmpty(obj)) {return -1;}return obj->value[obj->head];
}
//获取队列底部元素
int myCircularQueueRear(MyCircularQueue* obj) {if (myCircularQueueIsEmpty(obj)) {return -1;}return obj->value[(obj->rear + obj->k) % obj->k + 1];
}
//判空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {assert(obj);return obj->head == obj->rear;
}
//判满
bool myCircularQueueIsFull(MyCircularQueue* obj) {assert(obj);return (obj->rear + 1) % (obj->k + 1) == obj->head;
}
//队列销毁
void myCircularQueueFree(MyCircularQueue* obj) {assert(obj);free(obj->value);obj->value = NULL;free(obj);obj = NULL;
}

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

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

相关文章

网站结构规范对于独立站的重要性

网站结构是指通过优化网站的内部结构和布局,以提高其在搜索引擎结果页面(SERP)中的排名和可见性的过程。 涉及到网站内部链接、导航菜单、网站url路径、网站地图等细节。 网站结构的优化可以更好地帮助搜索引擎了索引网站的内容&#xff0c…

【笔记】vscode debug进入site-packages包源码

选择左侧栏第三个图标,点击创建 launch.json 文件 选择 Python Debugger 选择Python文件 这里可以看到launch.json 文件 在configurations中添加键值对 "justMyCode": false在文件中打上断点,点击"三角符"号开始调试 按F11或者红框…

reportlab 生成pdf文件 (python)

1 安装 pip install reportlab2 应用场景 通过网页动态生成PDF文档大量的报告和数据发布用XML一步生成PDF 官网案例 3 PLATYPUS Platypus是“Page Layout and Typography Using Scripts”,是使用脚本的页面布局和印刷术的缩写,这是一个高层次页面布局…

【面试题】MySQL 事务的四大特性说一下?

事务是一个或多个 SQL 语句组成的一个执行单元,这些 SQL 语句要么全部执行成功,要么全部不执行,不会出现部分执行的情况。事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务的主要作用是保证数…

Golang最快的Web框架

一、概述 Fiber是在Go最快的HTTP引擎Fasthttp之上构建的Go web框架。它的设计目的是在考虑到零内存分配和性能的情况下简化快速开发。它的特性: 稳健的路由提供静态文件极致性能内存占用空间低API终点中间件和Next支持快速服务器端编程模板引擎WebSocket支持Socke…

记一次kafkakerberos认证问题

1,报错信息 排查思路:检查kerberos配置文件 kerberos.kafka.principalkafka/huawe_baseSECURITY.COM kerberos.kafka.keytabPath/etc/huawe_base.keytab kerberos.kafka.krb5ConfPath/etc/krb5.conf但是查看kafka_client_jass.conf文件,发现…

网络基础-TCP/IP和OSI协议模型

一、OSI和TCP/IP模型 二、OSI七层模型 三、TCP/IP模型 参考:https://www.cnblogs.com/f-ck-need-u/p/7623252.html

由于bug发现的现象

//********************************* 示例1 ******************************* $flag (float)2; var_dump($flag); if ($flag 2) { } var_dump($flag);//输出结果 float(2) int(2)//********************************* 示例2 ******************************* $flag (floa…

关联规则挖掘(二)

目录 三、FP-增长算法(一)算法的背景(二)构造FP-树(三)生成频繁项集 四、关联规则的评价(一)支持度和置信度的不足(二)相关性分析 三、FP-增长算法 &#xf…

.NET 发布,部署和运行应用程序

.NET应用发布 发布.Net应用有很多种方式,下面列举三种发布方式: 单文件发布跨平台发布Docker发布 单文件发布 右键工程,选择“发布”,部署模式选择“独立”,目标运行时选择自己想要部署到的系统,我这里用…

问题:react函数中的state是上一次的值

场景 有一个聊天输入框组件,输入框上面有表情包组件。 通过redux创建了store,存储一个message的状态,用于表情包和输入框共享状态。 输入框通过设置value和onClick做了一个简单双向绑定,其中value的值为store里的message。 impor…

ChatGPT写作术:高效撰写顶级论文

ChatGPT无限次数:点击直达 ChatGPT写作术:高效撰写顶级论文 在当今信息爆炸的时代,如何撰写出高质量的论文成为许多研究者和学生的重要课题。借助人工智能技术的不断发展,像ChatGPT这样的语言生成模型能够为撰写论文提供有效的帮助。本文将介…

【Java框架】Spring框架(三)——Spring整合Mybatis及Spring声明式事务

目录 回顾Mybatis和新对象思路整理 Spring和MyBatis的整合步骤1. 创建Web工程,导入Spring和MyBatis的相关依赖2. 建立开发目录结构,创建实体类3. 创建数据访问接口和SQL映射语句文件4. 使用Spring配置文件配置数据源4.1 database.properties4.2spring配置…

全国产化无风扇嵌入式车载电脑在救护车远端诊断的行业应用

救护车远端诊断的行业应用 背景介绍 更加快速的为急症病人在第一时间开始进行诊断和治疗,是提高病人救助成功率的关键。因此,先进的救护系统正在思考,如何在病人进入救护车之后,立刻能够将救护车中各种检查仪器的信息快速的传回医院&#xf…

aws云靶场和一些杂记

aws靶场 在AWS靶场中,存在三个安全问题:1) 一个S3存储桶政策配置错误,允许公共访问,通过访问特定域名可获取flag。2) SQS消息队列的政策没有限制角色,允许发送和接收消息,通过aws sqs命令行工具的receive-…

Javaweb知识之AJAX的概念的通俗理解(包含axios)

AJAX 一.概念: AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML 异步 JavaScript的理解:就像你给朋友发了一条消息,然后继续做其他事情一样。你不需要等待朋友回复,可以继续做自…

JS-42-Node.js01-Node.js介绍

一、浏览器大战 众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准。 后来,微软通过IE击败了Netscape后一统桌面,结果几年时间,浏览器毫无进步。(2001年推出…

C++面向对象程序设计-北京大学-郭炜【课程笔记(七)】

C面向对象程序设计-北京大学-郭炜【课程笔记(七)】 1、类型转换运算符2、自增、自减运算符的重载3、继承和派生的基本概念3.1、基本概念3.2、派生类对象的内存空间 4、继承关系和复合关系4.1、继承关系的使用4.2、复合关系的使用 5、派生类覆盖基类成员6…

《论文阅读》基于情感原因感知的共情对话生成模型 2023 AAAI

《论文阅读》基于情感原因感知的共情对话生成模型 2023 AAAI 前言简介模型构架情绪推理器回复生成器实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《The Empathic Dialogue Generation Model…

npm ERR! code CERT_HAS_EXPIRED (创建vue过程)

npm ERR! code CERT_HAS_EXPIRED (创建vue过程) 起因:卸载 npm uninstall -g vue-cli时候发现报这个错误。 当我们创建vue之前,使用npm更新或者安装啥的时,出现此类提示,则表明,用来验证和网络加…