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

设计环形队列

文章目录

  • 1.思路分析
    • 1.1队列空满分析
    • 1.2出队分析
  • 2.循环队列设计

在这里插入图片描述

1.思路分析

1.1队列空满分析

在这里插入图片描述
首先我们假设一个长度为4的环形队列
队头front
队尾rear
当队列为空时
front=rear
当队列满时
front=rear
所以我们无法判断队列是满的或者空的
因此我们多加入一个空间使队列长度为5,我们使real的值为队尾的下一个下标
在这里插入图片描述

这种情况下
当队列为空时
front=rear
当队列满时
real+1=front
这样我们就有了判断空满的能力
但是
在这里插入图片描述
这种情况下显然是满了但是
rear+1=5
front=0
显然不相等
所以我们需要改进
判断满的条件为(rear+1)%(k+1)
进而推出下标在循环里的判断方式
(real/front)%(k+1)

1.2出队分析

出队
出头

return obj->a[obj->front];

出尾
出尾我们要给real-1
在这里插入图片描述

当然还有特殊情况
在这里插入图片描述
这种我们没办法-1,所以要改变我们的判定方式为
(rear+k)%(k+1)

return obj->a[(obj->rear+obj->k)%(obj->k+1)];

总结
当然上述方法也可以单把特殊情况拿出来写,我这里就不写了

2.循环队列设计

typedef struct {int *a;int front;int rear;int k;} MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj) {assert(obj);return obj->front==obj->rear;}bool myCircularQueueIsFull(MyCircularQueue* obj) {assert(obj);return ((obj->rear+1)%(obj->k+1))==obj->front;}
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue*obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->a=(int*)malloc(sizeof(int)*(k+1));obj->front=obj->rear=0;obj->k=k;return obj;}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {assert(obj);if(myCircularQueueIsFull(obj))return false;elseobj->a[obj->rear++]=value;obj->rear%=obj->k+1;return true;}bool myCircularQueueDeQueue(MyCircularQueue* obj) {assert(obj);if(myCircularQueueIsEmpty(obj))return false;elseobj->front++;obj->front%=obj->k+1;return true;}int myCircularQueueFront(MyCircularQueue* obj) {assert(obj);if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj->a[obj->front];}int myCircularQueueRear(MyCircularQueue* obj) {assert(obj);if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj->a[(obj->rear+obj->k)%(obj->k+1)];
}void myCircularQueueFree(MyCircularQueue* obj) {assert(obj);free(obj->a);free(obj);}

相关文章:

设计环形队列

文章目录1.思路分析1.1队列空满分析1.2出队分析2.循环队列设计1.思路分析 1.1队列空满分析 首先我们假设一个长度为4的环形队列 队头front 队尾rear 当队列为空时 frontrear 当队列满时 frontrear 所以我们无法判断队列是满的或者空的 因此我们多加入一个空间使队列长度为5&am…...

面向对象之-接口鉴权

1 需求 1.1 需求背景 为了保证接口调用的安全性,我们希望设计实现一个接口调用鉴权功能,只有经过认证之后的系统才能调用我们的接口,没有认证过的系统调用我们的接口会被拒绝。 2 需求分析 2.1 基础分析 对于如何做鉴权这样一个问题&…...

Python 多进程多线程线程池进程池协程

目录 一、线程与进程很简单的介绍 1.1 线程与进程的区别 二、多进程Process 2.1 多进程与多线程的区别 2.2 多进程为啥要使用队列 2.3 控制进程运行顺序 2.3.1 join , 2.3.1 daemon 守护进程 2.4 进程id 2.5 进程 存活状态is_alive() 2.5 实现自定义多…...

【自然语言处理】基于句子嵌入的文本摘要算法实现

基于句子嵌入的文本摘要算法实现人们在理解了文本的含义后,很容易用自己的话对文本进行总结。但在数据过多、缺乏人力和时间的情况下,自动文本摘要则显得至关重要。一般使用自动文本摘要的原因包括: 减少阅读时间根据摘要,选择自…...

fiddler抓包

一、工具介绍Fiddler是一个通过代理的方式来进行抓包工具,运行时会在本地建立一个代理服务,默认地址:127.0.0.1:8888。Fiddler开启之后,配置本机代理,再打开IE浏览器,IE的PROXY会自动变成127.0.0.1:8888&am…...

【Linux】网络套接字编程

前言 在掌握一定的网络基础,我们便可以先从代码入手,利用UDP协议/TCP协议进行编写套接字程序,明白网络中服务器端与客户端之间如何进行连接并且通信的。 目录 一、了解源目的IP、端口、网络字节序、套接字 端口号: 套接字&…...

break与continue关键字

1.概述 不知道大家有没有这样一种感受哈,有的时候容易混淆break语句和continue语句的用法,总是模棱两可,不敢确定自己是否使用正确了。正好,我们本篇的重点就是break和continue关键字的用法。 2.使用场景 Java中为啥会诞生break…...

kafka使用入门案例与踩坑记录

每次用到kafka时都会出现各种奇怪的问题,综合实践,下面汇总下主要操作步骤: Docker镜像形式启动 zookeeper启动 docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeperkafka启动 docker run --name kafka01 -p 9092:909…...

系统启动太慢,调优后我直呼Nice

问题背景最近在负责一个订单系统的业务研发,本来不是件困难的事。但是服务的启动时间很慢,慢的令人发指。单次启动的时间约在10多分钟左右,基本一次迭代、开发,大部分的时间都花在了启动项目上。忍无可忍的我,终于决定…...

java知识点

文章目录异常写法JVM加载反射访问private调用方法动态代理注解元数据&#xff1a;TargetRetention元注解泛型编写泛型擦拭法局限通配符无限定通配符(<?>)集合重写方法和实现类IO流字节与字符转换同步和异步可以设置编码的类Print*类Files时间与日期时区一种二种三种异常…...

文件的打开关闭和顺序读写

目录 一、文件的打开与关闭 &#xff08;一&#xff09;文件指针 &#xff08;二&#xff09; 文件的打开和关闭 二、文件的顺序读写 &#xff08;一&#xff09;fputc 1. 介绍 2. 举例 &#xff08;二&#xff09;fgetc 1. 介绍 2. 举例1 3. 举例2 &#xff08;三&…...

(十八)操作系统-进程互斥的软件实现方法

文章目录一、知识总览二、单标志法三、双标志先检查法四、双标志后检查法五、Peterson算法六、总结一、知识总览 二、单标志法 算法思想&#xff1a;两个进程在访问临界区后&#xff0c;会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进…...

2023年三月份图形化一级打卡试题

活动时间 从2023年3月1日至3月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…...

linux 防火墙管理-firewalld

什么是Firewalld 当前很多linux系统中都默认使用 firewalld&#xff08;Dynamic Firewall Manager of Linux systems&#xff0c;Linux系统的动态防火墙管理器&#xff09;服务作为防火墙配置管理工具。 “firewalld”是firewall daemon。它提供了一个动态管理的防火墙&#x…...

2023年最新大厂开发面试题(滴滴,华为,京东,腾讯,头条)

2023年最新大厂开发面试题&#xff01;&#xff01;&#xff01; 滴滴篇 B树、B-树的区别? 数据库隔离级别&#xff0c;幻读和不可重复读的区别&#xff1f; 有 hell, well, hello, world 等字符串组&#xff0c;现在问能否拼接成 helloworld&#xff0c;代码实现。 快排算…...

2023年三月份图形化三级打卡试题

活动时间 从2023年3月1日至3月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…...

蓝桥杯算法模板

模拟散列表拉链法import java.io.*; import java.util.*; public class a1 {static int n;static int N100003;static int[] hnew int[N];static int[] enew int[N];static int[] nenew int[N]; static int idx; static void insert(int x){int k(x%NN)%N;e[idx]x;ne[idx]h[k];…...

python之并发编程

一、并发编程之多进程 1.multiprocessing模块介绍 python中的多线程无法利用多核优势&#xff0c;如果想要充分地使用多核CPU的资源&#xff08;os.cpu_count()查看&#xff09;&#xff0c;在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocess…...

Vue.js自定义事件的使用(实现父子之间的通信)

vue v-model修饰符&#xff1a;.lazy、.number、.trim $attrs数据的透传&#xff0c;在组件&#xff08;这个是写在App.vue中&#xff09;,数据就透传到student组件中&#xff0c;在template中可以直接使用{{$attrs.students}}获取数据 通过defineProps定义的属性在attrs中就…...

第12天-商品维护(发布商品、商品管理、SPU管理)

1.发布商品流程 发布商品分为5个步骤&#xff1a; 基本信息规格参数销售属性SKU信息保存完成 2.发布商品-基本信息 2.1.会员等级-会员服务 2.1.1.会员服务-网关配置 在网关增加会员服务的路由配置 - id: member_routeuri: lb://gmall-memberpredicates:- Path/api/member/…...

当AI学会“看”画质:用Python和PyTorch动手实现一个无参考图像质量评估模型

用Python和PyTorch构建无参考图像质量评估模型&#xff1a;从理论到实践 在数字图像爆炸式增长的时代&#xff0c;图像质量评估(IQA)技术正成为计算机视觉领域不可或缺的一环。无论是社交媒体平台的内容审核、医疗影像的自动分析&#xff0c;还是监控系统的实时画面处理&#x…...

毕业季救星:Word 2016域代码终极指南,让你的参考文献列表和文内引用完美同步

学术写作效率革命&#xff1a;用Word域代码构建智能参考文献系统 每到毕业季&#xff0c;总有一群人在深夜里对着电脑屏幕抓狂——他们的论文参考文献编号像多米诺骨牌一样&#xff0c;因为中间插入了一个新引用而全部错乱。手动调整几十处引用编号不仅耗时&#xff0c;还容易出…...

【20年架构老兵亲授】:SITS 2026服务边界定义三原则、8类AI上下文耦合陷阱及动态治理沙盒实测数据

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生微服务架构&#xff1a;SITS 2026服务拆分与治理策略 AI原生微服务并非传统微服务的简单升级&#xff0c;而是以模型生命周期、推理上下文感知和实时反馈闭环为驱动的服务边界重构。SITS 2026&am…...

怎样高效管理微信社交网络:5个微信工具箱实用技巧完整指南

怎样高效管理微信社交网络&#xff1a;5个微信工具箱实用技巧完整指南 【免费下载链接】wechat-toolbox WeChat toolbox&#xff08;微信工具箱&#xff09; 项目地址: https://gitcode.com/gh_mirrors/we/wechat-toolbox 微信工具箱&#xff08;wechat-toolbox&#xf…...

从Claude Code到nanocode:轻量级AI编程助手核心架构与工程实践

1. 项目概述&#xff1a;从Claude Code到nanocode的轻量化之路 如果你是一名开发者&#xff0c;尤其是对AI编程助手&#xff08;AI Agent&#xff09;的内部工作原理充满好奇&#xff0c;那么你很可能听说过Anthropic的Claude Code。它是一个功能强大的命令行AI代理&#xff0…...

基于MCP协议连接AI与CDP:BlueConic-MCP项目实战解析

1. 项目概述&#xff1a;当营销技术遇上AI代理最近在折腾AI应用开发&#xff0c;特别是围绕OpenAI的Assistant API和各类AI Agent框架时&#xff0c;有一个痛点越来越明显&#xff1a;这些智能体能力再强&#xff0c;如果它们对业务的核心数据一无所知&#xff0c;那也只是一个…...

如何用本地OCR工具快速提取视频硬字幕:3步完成专业字幕制作

如何用本地OCR工具快速提取视频硬字幕&#xff1a;3步完成专业字幕制作 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字…...

CV前沿论文实战解码:轻量化与多模态对齐的工程落地指南

1. 这不是“论文速递”&#xff0c;而是一份面向实战者的CV研究动态解码指南你点开这个标题&#xff0c;大概率不是为了收藏一份PDF列表&#xff0c;而是想快速判断&#xff1a;这篇新出的视觉论文&#xff0c;值不值得我花三小时精读&#xff1f;它背后的技术思路&#xff0c;…...

AI Agent技能生成器:从零创建精准高效的SKILL.md文件

1. 项目概述&#xff1a;一个为AI Agent生成“技能说明书”的元技能如果你和我一样&#xff0c;经常在Claude Code、Cursor或者Codex这类AI编程助手工具里折腾&#xff0c;想让它帮你处理一些特定的、重复性的开发任务&#xff0c;那你肯定对“技能”&#xff08;Skill&#xf…...

AI设计风格Prompt实战指南:从32种风格词典到精准生成

1. 项目概述&#xff1a;一份给AI设计师的“风格词典”如果你和我一样&#xff0c;经常用 Claude、Cursor 或者 v0 这类 AI 工具来生成网页界面&#xff0c;那你肯定遇到过这个头疼的问题&#xff1a;脑子里想的是“赛博朋克”或者“瑞士风格”&#xff0c;但打出来的 prompt 却…...