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

循环队列的实现

我们知道队列的实现可以用单链表和数组,但是循环链表也可以使用这两种方式。

首先我们来看看单链表:

首先使用单链表,我们需要考虑循环队列的一些特点。

单链表实现循环队列我们要考虑几个核心问题:

首先我们要区别 解决 空 和 满 的问题。多加一个空间,或者加一个size变量来记录。

当front==rail时,为空。

当rail->next == front时为满

其次,我们需要解决如何 能取出队尾的数据。对于单链表,因为我们rail指向队尾的后一个,所以不好取出队尾数据

数组来实现 循环链表:

同样当front==rail时,为空

当 front == (rail+1)%(k+1)时为满

数组解决循环链表,我们要考虑到:当不断出队和入队时如何循环起来?

可以使用if语句来判断,也可以给让rail超出数组大小后,直接回到数组开头。

当rail在第一个位置时,如何找到队尾元素呢?

我们可以使用if,也可以(rail+k)%(k+1)来取到前一个元素。

#include<stdio.h>
#include<assert.h>
#include<stdbool.h>typedef struct {int* a;int front;int rail;int k;
}MyQueue;MyQueue* MyQueueCreat(int k)
{MyQueue* obj = (MyQueue*)malloc(sizeof(MyQueue));obj->a = (int*)malloc(sizeof(int) * (k + 1));obj->front = obj->rail = 0;obj->k = k;
}
bool isMyQueueEmtp(MyQueue* obj)
{assert(obj);if (obj->front == obj->rail)return true;return false;
}
bool isMyQueueFull(MyQueue* obj)
{assert(obj);return (obj->rail + 1) % (obj->k + 1) == obj->front;
}
bool MyQueueEn(MyQueue* obj, int value)
{assert(obj);if (isMyQueueFull(obj))return -1;obj->a[obj->rail++] = value;obj->rail %= obj->k + 1;
}
bool MyQueueOut(MyQueue* obj)
{assert(obj);obj->front++;obj->front %= obj->k + 1;}int MyQueueFront(MyQueue* obj)
{assert(obj);return obj->a[obj->front];
}
int MyQueueRail(MyQueue* obj)
{asert(obj);if (isMyQueueEmtp(obj))return - 1;return obj->a[obj->rail + obj->k % obj->k + 1];
}void MyQueueFree(MyQueue* obj)
{assert(obj);free(obj->a);free(obj);
}

好的,今天的复习就到这里

相关文章:

循环队列的实现

我们知道队列的实现可以用单链表和数组&#xff0c;但是循环链表也可以使用这两种方式。首先我们来看看单链表&#xff1a;首先使用单链表&#xff0c;我们需要考虑循环队列的一些特点。单链表实现循环队列我们要考虑几个核心问题&#xff1a;首先我们要区别 解决 空 和 满 的问…...

MTK平台开发入门到精通(休眠唤醒篇)休眠唤醒LPM框架

文章目录 一、lpm驱动源码分析二、设备属性调试文件沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 lpm 驱动源码分析。 mtk 平台下,其默认的 lpm 机制的源码位置:drivers/misc/mediatek/lpm/ 一、lpm驱动源码分析 目录:drivers/misc/mediatek/lpm/…...

ThreadLocal详解

一、ThreadLocal简介 1、简介 ThreadLocal叫做线程变量&#xff0c;它是一个线程的本地变量&#xff0c;意味着这个变量是线程独有的&#xff0c;是不能与其他线程共享的。这样就可以避免资源竞争带来的多线程的问题。 即 ThreadLocal类用来提供线程内部的局部变量&#xff0…...

利用Cookie劫持+HTML注入进行钓鱼攻击

目录 HTML注入和cookie劫持&#xff1a; 发现漏洞 实际利用 来源 HTML注入和cookie劫持&#xff1a; HTML注入漏洞一般是由于在用户能够控制的输入点上&#xff0c;由于缺乏安全过滤&#xff0c;导致攻击者能将任意HTML代码注入网页。此类漏洞可能会引起许多后续攻击&#…...

【接口汇总】常用免费的API

短信API 短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;3秒可达&#xff0c;99.99&#xff05;到达率&#xff0c;支持大容量高并发。 通知短信&#xff1a;当您需要快速通知用户时&#xff0c;通知短信是最快捷有效的…...

数字信号处理知识点

数字信号处理知识点1 频谱图中&#xff0c;横坐标取值范围的含义2 MATLAB常用函数2.1 波形产生2.2 滤波器分析2.3 滤波器实现2.4 线性系统变换2.5 滤波器设计2.5.1 FIR滤波器2.5.2 IIR滤波器2.6 Transforms(变换)2.7 统计信号处理和谱分析2.8 Windows(窗函数)2.9 Parametric Mo…...

计算机网络第八版——第三章课后题答案(超详细)

第三章 该答案为博主在网络上整理&#xff0c;排版不易&#xff0c;希望大家多多点赞支持。后续将会持续更新&#xff08;可以给博主点个关注~ 第一章 答案 第二章 答案 【3-01】数据链路&#xff08;即逻辑链路&#xff09;与链路&#xff08;即物理链路&#xff09;有何区…...

九龙证券|磷酸亚铁锂是什么?磷酸亚铁锂的特点和性能介绍

磷酸亚铁锂是一种新式锂离子电池电极资料&#xff0c;化学式&#xff1a;LiFePO4&#xff0c;磷酸亚铁锂为近来新开发的锂离子电池电极资料&#xff0c;首要用于动力锂离子电池&#xff0c;作为正极活性物质运用&#xff0c;人们习气也称其为磷酸铁锂。 磷酸亚铁锂的特色和功能…...

3D目标检测(二)—— 直接处理点云的3D目标检测网络VoteNet、H3DNet

前言上次介绍了基于Point-Based方法处理点云的模块&#xff0c;3D目标检测&#xff08;一&#xff09;—— 基于Point-Based方法的PointNet点云处理系列,其中相关的模块则是构成本次要介绍的&#xff0c;直接在点云的基础上进行3D目标检测网络的基础。VoteNet对于直接在点云上预…...

Java学习-IO流-常用工具包(hutool)

Java学习-IO流-常用工具包&#xff08;hutool&#xff09; hutool工具包 DateUtil&#xff1a;日期时间工具类 TImeInterval&#xff1a;计时器工具类 StrUtil&#xff1a;字符串工具类 HexUtil&#xff1a;16进制工具类 HashUtil&#xff1a;Hash算法类 ObjectUtil&#xff1…...

【LeetCode】1. 两数之和

题目链接&#xff1a;https://leetcode.cn/problems/two-sum/ &#x1f4d5;题目要求&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入…...

【数值模型环境搭建】Intel编译器安装

Intel编译器在数值模型编译中被广泛使用&#xff0c;它有一个很好的地方是自带Mpich&#xff0c;不需要额外安装。本文介绍Intel2018.1.163版本的安装。 1、安装包获取 Intel编译器可从官网下载下载&#xff1a; https://www.intel.cn/content/www/cn/zh/homepage.html 或者…...

操作VMware vCenter Converter 实现物理机迁移到虚拟机

实验目的&#xff1a;熟练VMware虚拟化项目中&#xff0c;物理机向ESXI5迁移操作过程。 1、打开VMwarevCenterConverterStandalone5.0软件&#xff0c;按“转换计算机”。 2、选择“已打开电源的计算机”。并输入远程要连接迁移物理机IP地址&#xff0c;登录帐户和密码。 然后…...

hutool XML反序列化漏洞(CVE-2023-24162)

漏洞简介 Hutool 中的XmlUtil.readObjectFromXml方法直接封装调用XMLDecoder.readObject解析xml数据&#xff0c;当使用 readObjectFromXml 去处理恶意的 XML 字符串时会造成任意代码执行。 漏洞复现 我们在 maven 仓库中查找 Hutool ​https://mvnrepository.com/search?…...

Java简单认识泛型——图文详解

写在开头:想必大家和博主一样&#xff0c;在以往学习JavaSE的语法中&#xff0c;遇到了一个陌生的词——泛型&#xff0c;博主当时很好奇&#xff0c;什么是泛型呢&#xff1f;即使是学完了JavaSE&#xff0c;这个问题都没有解决&#xff0c;只能在百度查阅了解关于泛型的一些皮…...

AcWing171.送礼物

题目描述 达达帮翰翰给女生送礼物&#xff0c;翰翰一共准备了NNN 个礼物&#xff0c;其中第 iii 个礼物的重量是 G[i]G[i]G[i]。 达达的力气很大&#xff0c;他一次可以搬动重量之和不超过 WWW 的任意多个物品。 达达希望一次搬掉尽量重的一些物品&#xff0c;请你告诉达达在…...

领域驱动设计-架构篇

目录 1、软件架构概述 1.1 软件架构概念 1.2 软件架构分类 1.3 软件架构模式 1.4 软件架构风格 2、领域驱动软件架构 2.1 架构风格 六边行架构&#xff08;领域驱动设计首选&#xff09; 为什么选择REST架构 松耦合 可伸缩性 易用性 约束性 2.2 架构模型 命令和…...

docker安装kafka

前言最近在用kafka做项目&#xff0c;所以本地搭建下kafka&#xff0c;但是又嫌java安装和安装kafka太麻烦&#xff0c;所以想到用docker来部署。镜像wurstmeister/kafka维护较为频繁的一个Kafka镜像。只包含了Kafka&#xff0c;因此需要另行提供ZooKeeper&#xff0c;推荐使用…...

Selenium4+Python3系列(十一) - Page Factory设计模式

写在前面&#xff1a; Page Object模式&#xff0c;目的是将元素定位和元素操作分层&#xff0c;只接触测试内容&#xff0c;不写基础内容&#xff0c;便于后续对自动化测试用例体系的维护&#xff0c;这是中心思想&#xff0c;也是核心。 那么我们继续将简洁延续&#xff0c…...

C++基础知识【4】函数及参数

目录 一、函数的基本概念 1.1、构成 1.2、声明和定义 1.3、函数的调用 二、参数 2.1、形参和实参 2.2、参数的传递 传值 传引用 传指针 三、C函数的一些新特性 3.1、Lambda表达式 3.2、右值引用 3.3、默认参数 3.4、变长参数模板 3.5、constexpr函数 3.6、noex…...

ollama-QwQ-32B量化部署:在4GB内存设备运行OpenClaw的配置

ollama-QwQ-32B量化部署&#xff1a;在4GB内存设备运行OpenClaw的配置 1. 为什么要在低配设备上折腾大模型&#xff1f; 去年冬天&#xff0c;我在树莓派上第一次尝试部署OpenClaw时&#xff0c;被现实狠狠教育了一顿——32GB内存的笔记本跑得飞起&#xff0c;换到4GB的树莓派…...

超越单线程:探索MATLAB并行计算与进程间通信的实践路径

1. MATLAB并行计算的本质与局限 很多人第一次接触MATLAB时&#xff0c;都会惊讶于它的单线程特性——当你运行一个耗时计算时&#xff0c;整个界面都会卡住&#xff0c;连命令行都无法输入。这其实源于MATLAB最初的设计哲学&#xff1a;保持简单一致的执行环境。但现代计算任务…...

3分钟告别机械键盘连击:精准修复打字困扰的Windows神器

3分钟告别机械键盘连击&#xff1a;精准修复打字困扰的Windows神器 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 机械键盘连击问题让无…...

AvrLib-fork:面向AVR的C++14零开销硬件抽象库

1. 项目概述AvrLib-fork 是一个面向 AVR 微控制器平台的高度类型安全、现代 C&#xff08;C14 兼容&#xff09;嵌入式库&#xff0c;专为 PlatformIO 生态系统深度优化设计。它并非 Arduino Core 的简单封装&#xff0c;而是一套从底层硬件抽象出发、以零开销抽象&#xff08;…...

硬件工程师转向嵌入式软件开发的十大技巧

嵌入式系统设计&#xff1a;硬件工程师转向软件开发的十大实用技巧1. 引言嵌入式系统设计是硬件与软件紧密结合的领域&#xff0c;硬件工程师在扩展技能到软件开发时&#xff0c;需要建立新的思维模式和工作方法。本文总结了硬件工程师转向软件设计时需要掌握的十大关键技巧&am…...

用Arduino玩转GPIO中断:按键消抖+过零检测的5个实战技巧

用Arduino玩转GPIO中断&#xff1a;按键消抖过零检测的5个实战技巧 在智能家居和物联网设备开发中&#xff0c;GPIO中断的高效处理能力往往决定了整个系统的响应速度和稳定性。想象一下&#xff0c;当你按下智能开关却要等待半秒才有反应&#xff0c;或者交流电器在错误的时间点…...

别再手动敲代码了!用通义千问+PHPStudy,30分钟搞定一个带数据库的登录注册系统

零基础30分钟构建登录系统&#xff1a;AIPHPStudy极速开发指南 上周帮学妹调试课程设计时&#xff0c;我发现90%的初学者都在重复造轮子——手动编写那些千篇一律的表单验证和数据库连接代码。其实借助现代开发工具链&#xff0c;完全可以在喝杯咖啡的时间里搭建出完整的登录注…...

基于vue+springboot框架的社区居民诊疗健康管理系统设计与实现

目录技术选型与架构设计核心功能模块划分开发阶段规划关键问题解决方案测试与部署文档规范项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 前端框架&#xff1a;Vue 3&#xff08;Composition API&#xff…...

零基础学习数据库:用快马AI生成你的第一个可操作图书管理系统

作为一个刚接触数据库的小白&#xff0c;最近在InsCode(快马)平台上尝试做了一个图书管理系统项目&#xff0c;整个过程意外地顺利。这里记录下我的学习心得&#xff0c;希望能帮到同样零基础的朋友们。 为什么选择图书管理系统作为入门项目 图书管理系统包含了数据库最基础的…...

清华大学学位论文LaTeX模板:thuthesis完整使用指南

清华大学学位论文LaTeX模板&#xff1a;thuthesis完整使用指南 【免费下载链接】thuthesis LaTeX Thesis Template for Tsinghua University 项目地址: https://gitcode.com/gh_mirrors/th/thuthesis 清华大学thuthesis LaTeX模板是专为清华学子设计的学位论文写作工具&…...