当前位置: 首页 > news >正文

【数据结构初阶第十二节】设计循环队列

云边有个稻草人-CSDN博客

必须有为成功付出代价的决心,然后想办法付出这个代价。

还有最后一道关于队列的习题,这题有点难,准备好迎接挑战吧! 

目录

1.【题目】

2.实现循环队列推荐用数组,Why?

3.Q1:如何来判断队列是满的?

4.上代码!

5.【注意】


这题得多画图理解,不能空想,而且要结合我写代码中穿插的注释,这样就会好理解点

1.【题目】

2.实现循环队列推荐用数组,Why?

链表:如果像我们实现队列一样使用链表,定义两个指针,phead为头删除数据,ptail为尾插入数据,一开始每次插入数据都要申请节点,在队列满了之后,我们在队头删除数据,之后再要插入数据时我们就要判断要插入的节点数据是否为空,节点虽在,但内容数据被删掉了,此时需要status来存储节点的状态,记录空还是非空,比较麻烦。

数组:直接申请一块连续的空间,不需要像链表那样不断申请结点,也不需要指针来指来指去。定义两个变量,front 和 rear 分别指向队头和队尾,往 rear 指向的位置插入数据,之后 rear++,在 front 指向的位置删除数据,之后 front++。大体思路就是这样,操作比链表要简单。但是还有很多细节需要去补充调整,接下来跟着我的思路开始。

3.Q1:如何来判断队列是满的?

一开始 front 和 rear 都指向下标为0的位置,此时队列为空,每插入一次数据 rear 都要++指向下一个位置,因为是循环队列所以当队列插满的时候 rear 和 front 指向同一个位置 ,这时我们发现队列满时和队列为空时都是 rear == front ,那么该如何分辨队列满和为空时?

A1:如上图所示,我们多申请一个空间,一开始 front 和 rear 还是指向同一个位置(此时front 和 rear 相等,循环队列为空),假如我们要插入4(k)个数据为满,插入完最后一个数据时 rear 指向多申请的那个空间,此时队列满了,按照(rear+1)% (k+1)== front,为满,这样我们就可以分清何时为满何时为空了。

4.上代码!
//创建循环队列的结构
typedef struct {int* arr;int front;int rear;int capacity;
} MyCircularQueue;//初始化循环队列
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* pst = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));pst->arr = (int*)malloc(sizeof(int)*(k+1));pst->front = pst->rear = 0;pst->capacity = k;return pst;
}//判断队列是否为满
bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->rear+1) % (obj->capacity+1) == obj->front;
}//向循环队列里面插入数据
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj)){return false;}obj->arr[obj->rear++] = value;//防止rear越界obj->rear %= obj->capacity+1;return true;
}//判断循环队列是否为空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->front == obj->rear;
}//删除元素
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;}//return obj->arr[obj->rear-1];//但是当rear == 0时,指向队头第一个位置时,rear-1 == -1,//此时出现错误,需要我们特殊处理一下int prev = obj->rear-1;if(prev == -1){prev = obj->capacity;}return obj->arr[prev];
}//销毁
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);
*/
5.【注意】
  1. 在取队尾元素的时候,是取 rear-1 指向的元素,若 rear-1 == -1,我们就需要特殊处理一下,具体详见代码。
  2. 在实现操作的时候我们要注意 front 和 rear 不能越界,obj->front %= obj->capacity,这样之后就从越界的位置变成下标为0的位置,如果没有越界,这样操作也不会改变 front 和 rear 的原始值。
  3. 我们申请的空间是比要存储数据的空间多一个。
  4. 我们定义一个 capacity 来保存要存储有效数据的个数。

这道题还是比较难的,我们需要多多思考细节思路+回顾敲代码。

完——

Look4You_Alberto Ciccarini、Beatrich_高音质在线试听_Look4You歌词|歌曲下载_酷狗音乐

(你真的会点开我精心分享给你的歌吗?)

至此结束!

我是云边有个稻草人

期待与你的下一次相遇。。。

相关文章:

【数据结构初阶第十二节】设计循环队列

云边有个稻草人-CSDN博客 必须有为成功付出代价的决心,然后想办法付出这个代价。 还有最后一道关于队列的习题,这题有点难,准备好迎接挑战吧! 目录 1.【题目】 2.实现循环队列推荐用数组,Why? 3.Q1:如…...

【小白学HTML5】盒模型(一文讲清margin、padding)_第三讲

根据第一讲的内容,我们知道margin是外边距、padding是内边距,那么内外边距该怎么设置呢? 1、margin:外边距 第一种情况:比如设置外边距为上10px、右20px、下30px、左40px 外边距可以分别设置为:margin-t…...

PLC数据采集网关(三格电子)

产品概述 PLC转Modbus网关型号SG-PLC-Private(PLC私有协议网关),是三格电子推出的工业级网关(以下简称网关),主要用于在不需要对PLC编程的情况下将PLC数据映射到Modbus TCP(映射的方式符合PLC工程师使用习惯…...

基于图扑 HT 可视化实现智慧地下采矿可视化

在前端开发领域,不断涌现的新技术为各行业带来了创新变革的可能。今天,让我们聚焦于图扑软件自研的 HT for Web 产品,看看它如何在前端 2D、3D 渲染方面发力,为智慧地下采矿可视化打造令人惊叹的解决方案,为开发者开启…...

【网络】高级IO(2)

或者在某些情况下,它可能是: typedef unsigned int nfds_t; 前言 由于select函数有下面几个特别明显的缺点,就推演出了改进版本——poll函数 比如select监视的fd是有上限的,我的云服务器内核版本下最大上限是1024个fd&#xf…...

论文解读 | AAAI'25 Cobra:多模态扩展的大型语言模型,以实现高效推理

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 个人信息 作者:赵晗,浙江大学-西湖大学联合培养博士生 内容简介 近年来,在各个领域应用多模态大语言模型(MLLMs&…...

区块链共识机制详解

区块链共识机制详解 🤝 1. 什么是共识机制? 共识机制是区块链网络中,所有节点就某个状态(如交易的有效性)达成一致的规则和过程。它解决了在去中心化网络中如何确保数据一致性的问题。 2. 主流共识机制 2.1 工作量证…...

Unity游戏制作中的C#基础(1)界面操作基础

1.脚本有关注意事项 (1).进入项目之后,一般创建一个文件夹Scripts用来存放c#脚本; (2).在Scripts中创建脚本,双击脚本,进入VS编辑器,有如下结构: start&#…...

python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公

文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python 二、处理 Excel 文件(openpyxl库)三、 处理 Word 文件(python-docx库)四、 处理 PPT 文件(python-pptx库)五、 自动发送邮件(smtplib和…...

欢乐力扣:同构字符串

文章目录 1、题目描述2、 代码 1、题目描述 同构字符串。给定两个字符串 s 和 t ,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。  每个出现的字符都应当映射到另一个字符,同时不改变字符…...

近10年气象分析(深度学习)

这是一个气象数据分析程序,主要用于分析和可视化气象数据。以下是该文件的主要功能: 1. 数据加载 在线数据:尝试从 GitHub 加载气象数据。 示例数据:如果无法加载在线数据,程序会自动生成示例数据。 2. 数据分析 …...

win11系统无法打开软件_组策略无法打开_gpedit.msc不生效_为了对电脑进行保护,已经阻止此应用---Windows工作笔记057

碰到这个问题挺麻烦的,要用的软件打不开了. 其实解决方法就是去组策略中修改一个策略就可以了,但是: 先来说: 而且,使用cmd输入的gpedit.msc也打不开了. 这个怎么解决? @echo off pushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPo…...

【JAVA】封装多线程实现

系列文章目录 java知识点 文章目录 系列文章目录👉前言👉一、封装的目标👉二、常见的封装方式及原理👉壁纸分享👉总结 👉前言 在 Java 中,封装多线程的原理主要围绕着将多线程相关的操作和逻辑…...

长短期记忆网络:从理论到创新应用的深度剖析

一、引言 1.1 研究背景 深度学习在人工智能领域的发展可谓突飞猛进,而长短期记忆网络(LSTM)在其中占据着至关重要的地位。随着数据量的不断增长和对时序数据处理需求的增加,传统的神经网络在处理长序列数据时面临着梯度消失和梯…...

过程监督(Process Supervision)融入到 GRPO (Group Relative Policy Optimization)

下面演示如何把“过程监督(Process Supervision)”的思想融入到 GRPO (Group Relative Policy Optimization) 中,从而对每个输出的中间步骤逐一打分、计算相对优势。本文的示例代码与 grpo_train.py (来源见下文)类似&…...

ES6中Object.defineProperty 的详细用法和使用场景以及例子

ES6 Object.defineProperty() 用法总结 Object.defineProperty() 是 ES5 引入的一个方法,ES6 继续强化了该方法的使用,它允许我们为对象的属性定义或修改 属性描述符。它能够控制对象属性的行为,如读写权限、可枚举性和可配置性。 1. Objec…...

【服务器与本地互传文件】远端服务器的Linux系统 和 本地Windows系统 互传文件

rz 命令:本地上传到远端 rz 命令:用于从本地主机上传文件到远程服务器 rz 是一个用于在 Linux 系统中通过 串口 或 SSH 上传文件的命令,它实际上是 lrzsz 工具包中的一个命令。rz 命令可以调用一个图形化的上传窗口,方便用户从本…...

NVIDIA A100 SXM4与NVIDIA A100 PCIe版本区别深度对比:架构、性能与场景解析

NVIDIA A100 SXM4与PCIe版本深度对比:架构、性能与场景解析 作为NVIDIA Ampere架构的旗舰级数据中心GPU,A100系列凭借强大的计算能力和显存带宽,已成为人工智能训练、高性能计算(HPC)等领域的核心硬件。然而&#xff…...

RAG基本原理

1.RAG全称是Retrieval-Augmented Generation Generation 的含义是 基于用户的输入,生成具有上下文含义的一段文字。 Query 比如说 太阳系中,哪个行星拥有的卫星数目最多? 回答Answer 木星,木星目前有79个卫星 这样的回答存在两个…...

WPS接入deepseek-OfficeAI助手插件下载

功能简介 OfficeAI 助手 是一款免费的智能AI办公工具软件,专为 Microsoft Office 和 WPS 用户打造。 无论你是在寻找如何输入“打勾(√)符号”的方法,还是想知道“怎么在插入表格前添加文字”,或者“该用哪个公式”&a…...

【微中子代理踩坑-前端node-sass安装失败】

微中子代理踩坑-前端node-sass安装失败-windows 1.npm版本2.python2.73.安装Visual Studio 1.npm版本 当前使用node版本13.12.0 2.python2.7 安装python2.7.9并配置环境变量 3.安装Visual Studio 安装Visual Studio 我是直接勾选了3个windows的sdk,然后就好了 最后 npm in…...

在群晖上使用Docker安装思源笔记

​​ 最近一段时间,docker的镜像地址都失效了,在群晖系统中,无论是早期版本的docker,还是最新版本中的Container Manager,注册表中都无法链接到docker的镜像,于是,就花了点时间查找资料&#x…...

后端之路——阿里云OSS云存储

一、何为阿里云OSS 全名叫“阿里云对象存储OSS”,就是云存储,前端发文件到服务器,服务器不用再存到本地磁盘,可以直接传给“阿里云OSS”,存在网上。 二、怎么用 大体逻辑: 细分的话就是: 1、准…...

华为guass在dbever和springboot配置操作

下面记录华为guass在dbever和springboot配置操作,以备忘。 1、安装dbeaver-ce-23.2.0-x86_64-setup.exe和驱动程序 Download | DBeaver Community 2、配置高斯数据库驱动 3、新建数据库连接 4、操作指引 opengauss官方文档 https://docs-opengauss.osinfra.cn/zh…...

【STM32学习】标准库实现STM32 ADC采集1路、2路、多路

目录 ADC采集 ADC配置步骤 STM32F103C8T6的ADC 输入通道 ​编辑 1路ADC(A4 ADC 通道4) 1路ADC源码代码链接: 2路ADC(A4 ADC 通道4、A5 ADC 通道5)基于DMA实现 多路ADC实现采集 ADC采集 ADC配置步骤 使能GPIO…...

常用网络工具分析(ping,tcpdump等)

写在前面 本文看下常用网络工具。 1:ping 1.1:用途 用于检验网络的连通性。 1.2:实战 在Linux环境中执行:ping www.sina.com.cn: [rootlocalhost ~]# ping www.sina.com.cn PING spool.grid.sinaedge.com (111.…...

计算机视觉:主流数据集整理

第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…...

1.1 go环境搭建及基本使用

golang下载地址: Download and install - The Go Programming Language (google.cn) 验证安装是否成功: go version 查看go环境 go env 注意:Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目,也不需要把项目放到GO…...

《深入理解JVM》实战笔记(一):内存区域、对象布局与OOM排查指南

JVM发展史与Java内存区域深度解析 Java虚拟机(JVM)是Java编程语言的核心部分,它允许Java程序跨平台运行,提供了一个抽象层,使得Java代码能够在不同操作系统和硬件平台上运行。本文将从JVM的发展历程开始,深…...

《筑牢元宇宙根基:AI与区块链的安全信任密码》

在科技浪潮汹涌澎湃的当下,元宇宙已不再是科幻作品中的遥远构想,而是逐渐步入现实,成为人们热议与探索的前沿领域。从沉浸式的虚拟社交,到创新的数字经济模式,元宇宙的发展前景广阔,潜力无限。但要让元宇宙…...

Docker构建时,设定默认进入的工作目录的方法

在 Docker 中,你可以通过不同的方式来设定容器默认进入的目录,以下针对不同场景分别介绍具体方法: 1. 使用 Dockerfile 设定工作目录 如果你是通过构建镜像的方式来运行容器,那么可以在 Dockerfile 中使用 WORKDIR 指令来设置容器启动时的默认工作目录。以下是具体步骤:…...

Linux nohup

nohup 是 Linux 系统中一个非常实用的命令,它的英文全称是 “no hang up”(不挂断),主要用于在用户退出登录或者终端会话关闭后,让指定的程序在后台持续运行,而不会受到 HUP(hangup)…...

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解

Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 前面我们已经将进程通信部分讲完了,现在我们来讲一个进程部分也非常重要的知识点——信号,信号也是进程间通信的一…...

ok113i平台——usb触摸屏驱动开发

在嵌入式Linux系统中,如果USB触摸屏能够检测到并且在手指移动时有数据,但点击无法触发,这可能是因为触摸屏驱动或配置的问题。以下是一些可能的解决方法: 1. 确认驱动支持 首先,确保您使用的触摸屏驱动程序完全支持您…...

【Bluedroid】AVRCP 连接源码分析(二)

接着上一篇【Bluedroid】AVRCP 连接源码分析(一)-CSDN博客,继续AVRCP连接的源码分析。 getcapabilities_cmd packages/modules/Bluetooth/system/btif/src/btif_rc.cc /***************************************************************************** Function …...

Jenkins 自动构建Job

1.创建Job 登录Jenkins,点击新建Item,创建项目 选择Pipeline,然后点击确定 接下来主要在Pipeline script中编写脚本 2.签出Git仓库 2.1配置Git账号 Manage Jenkins->Security->Credentials 在凭据界面,选择全局 添加凭据,添加Git用…...

现代企业软件测试人员需求与发展方向深度解析

引言 现代互联网软件行业是不断创新的引擎。应用程序越来越复杂,部署周期越来越短,用户期望越来越高,运营规模也越来越庞大。在这种动态环境中,软件测试人员的角色不再仅限于在发布前阶段“查找错误”。相反,测试人员…...

2.19学习(php文件后缀)

misc buu-后门查杀 下载附件,我们用火绒安全扫一下然后点击详情进入该文件所在文件夹,再用记事本打开该文件,搜索flag无果,再试试pass(由题目中的密码联系到pass,password,key等)&a…...

AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践

前言 自2022年末ChatGPT的问世,大语言模型(LLM)技术引发全球关注。在大模型技术落地的最佳实践中,智能体(Agent)架构显现出巨大潜力,成为业界的普遍共识,各大公司也纷纷启动Agent技…...

将Google文档导入WordPress:简单实用的几种方法

Google文档是内容创作者非常实用的写作工具。它支持在线编辑、多人协作,并能够自动保存内容。但当我们想把Google文档中的内容导入WordPress网站时,可能会遇到一些小麻烦,比如格式错乱、图片丢失等问题。本文将为大家介绍几种简单实用的方法&…...

Spring的过滤器获取请求体中JSON参数,同时解决Controller获取不到请求体参数的问题。

Spring的过滤器获取请求体中JSON参数,同时解决Controller获取不到请求体参数的问题。 文章目录 前言一、需求场景描述二、原因解析三、自定义 HttpServletRequestWrapper 来保存数据解决Controller获取不到的问题。四、案例(要注意的点) 前言 Spring的过滤器获取请…...

全链路优化:如何让单点登录认证接口并发性能翻倍?

背景 最近针对一个单点登录认证项目进行性能优化,在 8核 16G 环境下的认证并发能力从每秒800次提升至每秒1600次,性能提升一倍,整理此次优化过程中的相关性能优化操作总结和大家分享一下。 Nginx配置优化 在并发认证场景下,Ngi…...

基于大语言模型的推荐系统(1)

推荐系统(recommendation system)非常重要。事实上,搜索引擎,电子商务,视频,音乐平台,社交网络等等,几乎所有互联网应用的核心就是向用户推荐内容,商品,电影&…...

嵌入式八股文(四)计算机网络篇

目录 第一章 基础概念 1. 服务 2. 协议 3. 接口 4. 网络体系结构 5. OSI七层模型 6. TCP/IP四层参考模型 7. 最大传输单元MTU及分片操作 8. 流量控制 9. 数据链路层提供的功能 10. 汇集树 11. 生成树协议 12. 拥塞控制及途径 6. 包调度 7. 隧道 8. 抖动 9. 逆…...

【龙智】Confluence到期日提醒插件Data Center v1.8.0发布:Confluence 9兼容、表格提醒强化,Slack通知升级

还在为Confluence中重要内容的逾期而焦头烂额? 还在苦于手动核查任务的截止日期? 不仅效率低下,还时常遗漏关键信息? 别担心,你的帮手来了! Confluence到期日提醒插件——由Atlassian全球白金合作伙伴龙…...

Luckfox Pico Max运行RKNN-Toolkit2中的Yolov5 adb USB仿真

1:下载rknn-toolkit2 git clone https://github.com/rockchip-linux/rknn-toolkit2 2:修改onnx目录下的yolov5的test.py的代码 # pre-process config print(--> Config model) rknn.config(mean_values[[0, 0, 0]], std_values[[255, 255, …...

AI IDE - Trae -学习与实践

1.应用场景 主要用于使用AI IDE进行快速的开发,提高开发效率;节约开发时间; 额外话:可以预见搞出来的东西终将取代了我们自身; 2.学习/操作 1.文档阅读 Trae - Ship Faster with Trae -- 官网,下载安装 …...

内外网文件传输 安全、可控、便捷的跨网数据传输方案

一、背景与痛点 在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战: 安全性风险:内外网直连可能导致病毒传播、数据泄露。 操作繁琐:传统方式需频繁切换网络环境&…...

pycharm 调试 debug 进入 remote_sources

解决办法1: pycharm函数跳转到remote_sources中的文件中_pycharm修改remotesource包存放地址-CSDN博客 file->settings->project structure将项目文件夹设为"Sources"(此时文件夹会变为蓝色)。 解决方法2 Debug:使用Pychar…...

Docker国内镜像源部署deepseek

‌部署deepseek时Docker拉取国内镜像失败可能是由于国内网络环境复杂或镜像源配置不正确导致的‌。 具体原因可能包括: ‌网络问题‌:国内网络环境复杂,可能导致访问国内镜像仓库的速度较慢或无法访问,进而影响Docker镜像的拉取…...