【算法通关指南:数据结构和算法篇】算法里的 “排队系统”:队列的数组模拟 + STL queue 实战

【算法通关指南:数据结构和算法篇】算法里的 “排队系统”:队列的数组模拟 + STL queue 实战
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《算法通关指南》
永远相信美好的事情即将发生
在这里插入图片描述

文章目录


前言

本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力
ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长

一、队列的概念

队列也是⼀种访问受限的线性表,它只允许在表的⼀端进行插入操作,在另⼀端进行删除操作。
• 允许插入的⼀端称为队尾,允许删除的⼀端称为队头。
• 先进入队列的元素会先出队,故队列具有先进先出(FirstInFirstOut)的特性。

二、队列的模拟实现

2.1创建

• 一个足够大的数组充当队列;
• 一个变量h 标记队头元素的前⼀个位置
• 一个变量t标记队尾元素的位置。两个变量(h, t] 是⼀种左开右闭的形式,这样设定纯属个人喜好,因为后续的代码写着比较舒服。,也以h标记队头元素的位置。只要能控制住代码不出现bug ,想怎么实现就怎么实现。

在这里插入图片描述
constint N =1e6+10;int h, t;// 队头指针,队尾指针int q[N];// 队列

2.2 入队

注意:我们依旧从下标为1的位置开始存储有效元素

在这里插入图片描述
// ⼊队voidpush(int x){ q[++t]= x;}

时间复杂度:O(1)

2.3出队

在这里插入图片描述
// 出队voidpop(){ h++;;}

时间复杂度:O(1)

2.4队头

注意:不是h所指的位置,而是h所指的下⼀个位置

在这里插入图片描述
// 队头元素intfront(){return q[h +1];}

时间复杂度:O(1)

2.5队尾

在这里插入图片描述
// 队尾元素intback(){return q[t];}

时间复杂度:O(1)

2.6判空

在这里插入图片描述
// 队列是否为空 bool empty(){return t == h;}

时间复杂度:O(1)

2.7有效元素个数

在这里插入图片描述
// 队列的大小intsize(){return t - h;}

时间复杂度:O(1)

2.8 所有测试代码

#include<iostream> using namespace std;constint N =1e6+10;int h, t;// 队头指针,队尾指针int q[N];// 队列// ⼊队voidpush(int x){ q[++t]= x;}// 出队voidpop(){ h++;;}// 队头元素intfront(){return q[h +1];}// 队尾元素intback(){return q[t];}// 队列是否为空 bool empty(){return t == h;}// 队列的大小intsize(){return t - h;}intmain(){// 测试for(int i =1; i <=10; i++){push(i);}while(size())// while(!empty()){ cout <<front()<<" "<<back()<< endl;pop();}return0;}

运行结果:

在这里插入图片描述

三、queue

(1)如何创建?
(2)里面提供了什么函数接口?
(3) 每个函数的功能以及时间复杂度

3.1 如何创建

queue<T> q; T :可以是任意类型的数据。 

3.2容器相关接口

3.2.1 size / empty

(1) size :返回队列⾥实际元素的个数;
(2) empty :返回队列是否为空。

时间复杂度:O(1)

3.2.2 push / pop

(1) push :入队;
(2)pop:出队。

时间复杂度:O(1)

3.2.3 front / back

(1) front :返回队头元素,但不会删除
(2) b ack :返回队尾元素,但不会删除
时间复杂度: O(1)

3.3测试所有接口

#include<iostream>#include<queue> using namespace std;typedef pair<int,int> PII;intmain(){// 测试queue queue<PII> q;for(int i =1; i <=10; i++){ q.push({ i, i *10});}while(q.size())// while(!q.empty()){auto t = q.front(); q.pop(); cout << t.first <<" "<< t.second << endl;}return0;}

运行结果:

在这里插入图片描述

总结与每日励志时刻

本文介绍了队列的概念、实现方法和STL中的queue容器。队列是一种先进先出(FIFO)的线性数据结构,文章详细讲解了如何用数组模拟实现队列,包括入队、出队、获取队头/队尾元素、判空和计算元素个数等操作。同时,文章也介绍了C++标准库queue容器的基本用法和接口函数。队列在算法竞赛中应用广泛,主要关注时间效率,通常采用数组实现。文章还提供了完整的测试代码和运行结果,帮助读者理解队列的实现原理和使用方法。

在这里插入图片描述

Read more

商品销售数据分析(python)

商品销售数据分析(python)

一.引言 本文通过利用Python(主要利用pandas库)对商品销售明细表进行数据分析,并进行数据从表格到图表的可视化操作,意在展现python工具在商业领域进行数据分析的便捷性与灵活性。 二.正文 1.数据来源 本文数据源自FineBi官方网站提供的销售明细表压缩包,解压后导入工作文件夹 2.1.数据预处理 拿到数据后先进行数据清理,由于IDE里无法打开格式为xlsx的文件,我们可以先在excel里面打开,观察后续数据清理是否能对的上。 经过查看,这是一个(40514,12)的数据集,即40514行,12列 接下来我们写一个简单的python脚本进行数据清理: read.py import pandas as pd df=pd.read_excel(‘销售明细表.xlsx’) print(df.info()) print(‘\n’) errorcb=df[df.loc[:,‘成本额’

By Ne0inhk

Miniforge离线安装完全指南:无网环境下的Python部署解决方案

Miniforge离线安装完全指南:无网环境下的Python部署解决方案 【免费下载链接】miniforgeA conda-forge distribution. 项目地址: https://gitcode.com/gh_mirrors/mi/miniforge 你是否曾在实验室服务器、企业内网或特殊作业环境中,因为网络限制而无法安装Python环境?面对这种困境,传统的在线安装方式往往束手无策。Miniforge作为conda-forge的官方发行版,提供了一套完美的离线部署方案,让你在任何无网络环境下都能快速构建完整的Python数据科学环境。 为什么选择Miniforge进行离线部署 在离线环境下部署Python环境,Miniforge具有独特优势。它不仅体积小巧、预装mamba加速工具,还默认使用conda-forge源,更重要的是其安装包中已预配置核心依赖,真正实现了"一次下载,随处安装"。 核心优势对比 特性Miniforge传统在线安装安装包大小约100MB依赖网络下载包含组件Python、Conda、Mamba仅基础安装器部署时间2-5分钟10-30分

By Ne0inhk
Python IDLE 使用教程 一文让你掌握Python3.8 自带的集成开发环境的使用

Python IDLE 使用教程 一文让你掌握Python3.8 自带的集成开发环境的使用

说明:本教程聚焦IDLE(Python自带的集成开发环境)的常用功能,帮助你快速上手。 本文中使用的截图软件为Snipaste(免费好用) 详细使用步骤可以移步我的另一篇博客 Snipaste安装使用教程 📑 目录 * 一、启动IDLE * 二、Shell交互模式 * 三、编辑器使用 * 四、调试功能 * 五、实用技巧 * 六、常见问题 一、启动IDLE 1.1 三种启动方式 方式一:开始菜单(Windows) 1. 点击"开始"菜单 2. 找到 Python 3.x 文件夹 3. 点击 IDLE (Python 3.x) ######方式二:搜索启动

By Ne0inhk

Python 小白 Debug 全指南:从 “看报错就懵” 到 “1 分钟定位 bug”(万字版)

【个人主页:玄同765】   大语言模型(LLM)开发工程师|中国传媒大学·数字媒体技术(智能交互与游戏设计)   深耕领域:大语言模型开发 / RAG知识库 / AI Agent落地 / 模型微调   技术栈:Python / LangChain/RAG(Dify+Redis+Milvus)| SQL/NumPy | FastAPI+Docker ️   工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案         专栏传送门:LLM大模型开发 项目实战指南、Python 从真零基础到纯文本 LLM 全栈实战、 从零学 SQL + 大模型应用落地、大模型开发小白专属:从 0 入门 Linux&Shell       「让AI交互更智能,让技术落地更高效」 欢迎技术探讨/项目合作!

By Ne0inhk