【每日一题】设计循环队列(C语言)
循环队列是我们可以对队列有更深一步的理解的题目,而且可以进一步加强其他方面的知识(例如对循环数组的取模运算,指针的解引用),是个蛮不错的巩固习题,话不多说,进入正题。

链接在此:设计循环队列
强烈建议先自己做一遍,直接看的话可能会比较不知所云
目录
- 利用数组设计:
- 思路:
- 代码实现:
- 利用链表设计:
- 思路:
- 代码实现:
本题可以使用 数组或链表来设计,本篇文章都会涉及到
做这题时会遇到很多难点
先说结论:此题的难点在于如何判断数组的 空与满,不管是链表还是数组,实现此问题都是难点。
在数据结构中,我们通常在解决此问题时都是选择多设置一个位置,back指向当前元素的下一个。
但多出来的位置不是不用,例如:

这样可以比较好的解决此类问题。
利用数组设计:
思路:
已经有了上述的前置知识
我们就可以比较轻易地判断空与满,数组中的front和back下标指向同一个位置时是空,那么什么时候会满呢?
当back的下一个为front时就为满,即back+1 == front,

但是如果back在front后边,就需要我们的比较灵活的运用取模运算
在上边我们说到back+1 == front时为满,但是在上图中,我们发现back+1并不是front,而是超出了数组,
我们说过,会定义N+1个空间,N是元素个数,经过思考,我们会发现N就是back的下标,N+1就是back+1位置的下标,
那我们(back + 1)% (N + 1) == front时就是满
代码中剩下的取模运算也都大同小异
代码实现:
typedef struct {int* arr;int front;int rear;int N;
} MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return (obj->front == obj->rear);
}bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->rear + 1 ) % (obj->N + 1) == obj->front;
}MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* ret = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));ret->arr = (int*)malloc(sizeof(int)*(k+1));ret->front = 0;ret->rear = 0;ret->N = k;return ret;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj)){return false;}obj->arr[obj->rear] = value;obj->rear++;//防止rear出界obj->rear %= (obj->N + 1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return false;}obj->front++;//防止front出界obj->front %= (obj->N + 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;}//此处可以不用取模,if与else判断也可以return obj->arr[(obj->rear-1+(obj->N+1))%(obj->N+1)];
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->arr);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);
*/
一一一一一一一一分割线一一一一一一一一
持续更新中…
利用链表设计:
思路:
代码实现:
相关文章:
【每日一题】设计循环队列(C语言)
循环队列是我们可以对队列有更深一步的理解的题目,而且可以进一步加强其他方面的知识(例如对循环数组的取模运算,指针的解引用),是个蛮不错的巩固习题,话不多说,进入正题。 链接在此࿱…...
logic-flow 使用过程中遇到的bug - 拖动节点到画布的时候,鼠标松开,节点不落在画布,仍旧跟着鼠标走
背景: 插件:logicFlow 用途:画流程图 bug表现: 初始化的样子: bug的样子: 拖动第一个节点的时候,一切正常(无论哪个节点作为第一个节点,都是正常的,但是拖动…...
el-tree结合el-switch实现状态切换
<template><div><el-col :span"24"><el-card class"tree-card"><div class"sketch_content selectFile"><span class"span_title">组织列表 </span><div style"display: flex; jus…...
汽车智能座舱/智能驾驶SOC -1
看到华为&小康的 AITO问界M6、M7各种广告营销、宣传、测评、好评如潮水般席卷网络各APP平台。翻看了中信和海通对特斯拉M3和比亚迪元的拆解报告,也好奇华为的汽车芯片平台又能做出哪些新花样,下面是Mark开头,也学习下智能座舱和智能驾驶芯…...
2023 年爆肝将近 20 万字讲解最新 JavaEE 全栈工程师基础教程(更新中)
1. Java 语言基本概述 Java 是一种广泛使用的编程语言,由 James Gosling 在 Sun Microsystems(现在是 Oracle Corporation 的一部分)于 1995 年发表。Java 是一种静态类型的、类基础的、并发性的、面向对象的编程语言。Java 广泛应用于企业级…...
目标检测YOLO实战应用案例100讲-基于改进YOLOv5s的道路目标检测(续)
目录 3.3融合注意力模块 3.3.1注意力机制 3.3.2 SENet 3.3.3 CBAM 3.3.4ECA 3.3.5改进后的算法网络结构...
Laravel/Lumen 任务调度简易入门说明
前提 Laravel 中任务调度简化了服务器系统中 Cron 的操作,使得 计划任务 的实现更为简便。 这里主要以 Laravel 自带的消息队列进行说明,了解其间运行关系可以让我们更清晰的进行代码实现。 下方代码以 Lumen 9.x 框架进行举例,与 Laravel…...
目标检测 详解SSD原理,数据处理与复现
原理详解 前言 今天我们要读的这篇VGGNet(《Very Deep Convolutional Networks For Large-Scale Image Recognition》),就是在AlexNet基础上对深度对网络性能的影响做了进一步的探索。它是ImageNet 2014年亚军,相比于AlexNet&am…...
智能座舱架构与芯片- (8) 视觉篇
一、概述 相比起用于ADAS感知系统的摄像头,用于智能座舱内部的摄像头,其功能特性和性能要求相对简单。例如,OMS乘客监控摄像头,一般达到5MP即可有良好的效果。同时,OMS也可应用于车内会议系统,还应用于车内…...
uniapp、微信小程序返回上页面刷新数据
目录 前言: 方法1: 方法2: 方法3: 前言: 返回上页面刷新数据这个功能主要用于在当前页面点击跳转到另一个页面之后,在另一个页面对数据进行了操作,比如:阅读量,然后返…...
axios 请求合集
post 请求 请求负载请求参数(Request Payload) import axios from axios import qs from query-stringexport function getRoles(data){return axios.post(目标地址,data,{headers:{Content-Type: application/json,},}) }表单请求参数(Form…...
浪潮信息云峦服务器操作系统KeyarchOS体验与实践
写在前面 大家好我是网络豆,一名云计算运维人员,本文将会带大家体验一下浪潮信息服务器操作系统云峦KeyarchOS。看看浪潮信息服务器操作系统云峦KeyarchOS的优势与实践操作如何。 背景了解 KeyarchOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术…...
将 Spring 微服务与 BI 工具集成:最佳实践
软件开发领域是一个不断发展的领域,新的范式和技术不断涌现。其中,微服务架构和商业智能(BI)工具的采用是两项关键进步。随着 Spring Boot 和 Spring Cloud 在构建强大的微服务方面的普及,了解这些微服务如何与 BI 工具…...
负载均衡Ribbon和Feign的使用与区别
Ribbon 的介绍 Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡和服务调用。Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer…...
Python Opencv实践 - 二维码和条形码识别
使用pyzbar模块来识别二维码和条形码。ZBar是一个开源软件,用来从图像中读取条形码,支持多种编码,比如EAN-13/UPC-A、UPC-E、EAN-8、代码128、代码39、交错2/5以及二维码。 pyzbar是python封装ZBar的模块,我们用它来做条形码和二维码的识别。…...
树莓派的的串口通信协议
首先,回顾一下串口的核心知识点,也是面试重点: 串口通信通常使用在多机通讯中串口通信是全双工的决定串口通信的成功与否的是 数据格式 和 波特率数据格式:1. 数据位 2.停止位 3. 奇偶校验位 树莓派恢复串口 回忆前几节树莓派刷机…...
DAY60 84.柱状图中最大的矩形
84.柱状图中最大的矩形 题目要求:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 思路 单调栈 本地单调栈的解法和接雨水的题目是遥相呼…...
你知道Linux操作系统的前世今生吗?Linux系统又该如何搭建呢?
文章目录 前言1. Linux 是什么1.1 Unix & Linux 发展历程图1.2 Linux 的发展1.3 Linux 的发行版 2. Linux 环境搭建2.1 环境搭建方式2.2 使用云服务器 3. 使用终端软件连接到 Linux3.1 什么是终端软件3.2 下载安装 XShell3.3 使用 XShell 登陆主机 总结 前言 可能很多人都…...
674. 最长连续递增序列
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l < i < r,都有 nums[i] < nums[i 1] &a…...
DS5上ARM编译器样例工程改为GCC编译
想问一下,DS5上ARM编译器通过的样例工程,换成aarch64-none-elf-gcc工具链,是不是需要把startup.S改成gcc支持的格式呀?怎么改呢,求助大神们指点一下!谢谢!...
1500对工业图像:DeepPCB如何重塑电路板缺陷检测的技术范式
1500对工业图像:DeepPCB如何重塑电路板缺陷检测的技术范式 【免费下载链接】DeepPCB A PCB defect dataset. 项目地址: https://gitcode.com/gh_mirrors/de/DeepPCB 在电子产品制造领域,PCB质量检测一直是制约生产效率和产品可靠性的关键瓶颈。传…...
别再手动测XSS了!手把手教你用Burp Suite的xssValidator插件自动化检测(附PhantomJS环境配置避坑指南)
别再手动测XSS了!手把手教你用Burp Suite的xssValidator插件自动化检测(附PhantomJS环境配置避坑指南) 在Web安全测试中,XSS漏洞一直是高频出现且危害严重的问题。传统的手工测试方法不仅效率低下,还容易遗漏隐蔽的漏…...
终极指南:如何用GHelper轻松掌控华硕笔记本性能
终极指南:如何用GHelper轻松掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertbo…...
NVIDIA Profile Inspector终极指南:免费解锁显卡隐藏性能的简单教程
NVIDIA Profile Inspector终极指南:免费解锁显卡隐藏性能的简单教程 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏画面撕裂、卡顿延迟而烦恼吗?你的NVIDIA显卡其实隐…...
别再复制粘贴了!手把手教你用CPLEX OPL从零搭建第一个优化模型(附完整代码)
从零开始:用CPLEX OPL构建你的第一个生产优化模型 每次看到那些复杂的优化问题,你是不是总想直接复制粘贴代码?但真正解决问题时,却发现自己连最基本的模型结构都搞不清楚。今天我们就来彻底改变这种状况——我将带你从零开始&…...
灵珠AI日均token消耗破50亿:深度用户或成AI应用护城河
一个首次内测刚上线两周多、用户规模尚不算庞大的AI创作平台,日均token(词元)消耗量却悄然突破了50亿——这组看似矛盾的数据,正在引发行业对AI应用深度的新思考。近日,上海的零门槛AI创作平台“灵珠”透露,…...
3步搞定海量Excel文件检索:智能查询助手实战指南
3步搞定海量Excel文件检索:智能查询助手实战指南 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 你是否曾在堆积如山的Excel文件中寻找某个关键数据,却不得不在几十个文件间反复…...
QKeyMapper终极指南:Windows平台全设备按键映射与虚拟手柄模拟的完全解决方案
QKeyMapper终极指南:Windows平台全设备按键映射与虚拟手柄模拟的完全解决方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支持游戏手柄…...
RK3568平台上 rknn-Toolkit2 rknn build()函数介绍
各专栏更新如下👇 大模型初探分享零基础AI学习经历 OAI-5G开源通信平台实践 OpenWRT常见问题分析 5G CPE 组网技术分享 Linux音视频采集及视频推拉流应用实践详解 得力工具提升工作效率 大模型的量化版本可以移植部署到边缘设备上实现特点场景应用,…...
Paseo:本地化多AI智能体编排平台的设计与实战指南
1. 项目概述:一个面向开发者的多智能体本地化编排平台如果你和我一样,每天的工作流里充斥着各种AI编码助手——Claude Code在终端里帮你重构代码,Codex在IDE里补全函数,OpenCode在另一个项目里调试——那你肯定也头疼过一个问题&a…...
