当前位置: 首页 > 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/…...

手把手教你用MOS管搭建防反接电路:从原理图到PCB布局的避坑指南(以立创EDA为例)

从零构建MOS管防反接电路&#xff1a;立创EDA实战全流程解析 电源反接是电子设计中最常见的"低级错误"之一&#xff0c;却可能造成毁灭性后果。想象一下&#xff1a;你花费数周完成的智能家居控制器&#xff0c;因为电池装反而瞬间烧毁主控芯片——这种场景在创客社区…...

告别手动刷新!用PowerShell脚本实现Windows下校园网自动重连(含任务计划设置)

告别手动刷新&#xff01;用PowerShell脚本实现Windows下校园网自动重连&#xff08;含任务计划设置&#xff09; 每次开机都要手动登录校园网&#xff1f;网络突然断开还得重新输入账号密码&#xff1f;这些繁琐操作已经成为过去式。本文将手把手教你用PowerShell打造全自动校…...

R3nzSkin内存换肤技术实现与国服应用实践

R3nzSkin内存换肤技术实现与国服应用实践 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server R3nzSkin是一款专为中国服务器优化的英雄联盟内存换肤工具&am…...

OCR实战三阶段:检测、识别、结构化全流程解析

1. 这不是“把图片变文字”那么简单&#xff1a;OCR背后的真实战场光学字符识别&#xff08;OCR&#xff09;这三个字母&#xff0c;很多人第一反应是“截图转文字”“PDF复制不了&#xff1f;丢给OCR试试”。但如果你真这么想&#xff0c;就等于站在手术室门口说“不就是动刀子…...

AI编程助手色彩科学技能库:从OKLCH到APCA的现代色彩实践

1. 项目概述&#xff1a;一个为AI编程助手打造的“色彩科学专家”技能库如果你和我一样&#xff0c;经常在开发与色彩相关的工具、设计系统&#xff0c;或者需要向团队解释为什么某个颜色方案行不通时&#xff0c;总得反复查阅同一堆资料——那个讲解OKLAB色彩空间的视频、那篇…...

别再只用if-else了!用Simulink Relay模块给你的控制逻辑加个‘缓冲带’(附C代码生成分析)

别再只用if-else了&#xff01;用Simulink Relay模块给你的控制逻辑加个‘缓冲带’&#xff08;附C代码生成分析&#xff09; 在嵌入式控制系统的开发中&#xff0c;我们常常需要处理各种阈值判断和状态切换。传统的if-else结构虽然简单直接&#xff0c;但在实际应用中往往会导…...

白起杀降将卒,项羽杀降,黄巢他们有的选择吗?

杀降不是暴君的个人意志&#xff0c;而是一场场被逼到极限的“系统自保”。 白起要为40万战俘找活路&#xff0c;项羽要喂活20万张嘴并防止后院起火&#xff0c;黄巢要让自己和十几万兄弟明天不饿死。杀降本身这份“答卷”固然是反人类的&#xff0c;但那份出题人的冷酷与无情&…...

Python包安装全攻略:从pip、conda到离线安装,总有一种方法适合你

Python包安装全攻略&#xff1a;从pip、conda到离线安装&#xff0c;总有一种方法适合你 在Python开发中&#xff0c;依赖管理是每个开发者必须掌握的核心技能。无论是数据科学家搭建机器学习环境&#xff0c;还是Web开发者部署Django应用&#xff0c;都离不开Python包的安装与…...

别再用LoadRunner了!用JMeter+阿里云PTS搞定mPaaS网关全链路压测(附MGSJMeterExt插件实战)

从LoadRunner到JMeterPTS&#xff1a;mPaaS网关压测的高效实战指南 在移动应用性能优化的战场上&#xff0c;压力测试一直是确保系统稳定性的关键环节。传统工具如LoadRunner虽然功能强大&#xff0c;但面对mPaaS这类移动网关架构时&#xff0c;其高昂的授权成本、复杂的适配流…...

从“Hello There!”徽章看低功耗Mesh网络在嵌入式社交硬件的实现

1. 项目概述&#xff1a;当硬件徽章成为社交网络的物理层如果你参加过大型的技术会议&#xff0c;尤其是像嵌入式系统大会&#xff08;ESC&#xff09;这样的场合&#xff0c;你肯定对那种既兴奋又略带尴尬的社交氛围不陌生。满屋子都是聪明绝顶的工程师&#xff0c;大家脑子里…...