数据结构小白的第一次尝试------queue (项目实战)

C++ queue:数据结构的“排队哲学”与“先进先出法则 就像一位公正的排队管理员,确保数据严格遵循“先进先出(FIFO)”的法则,维护秩序与效率。这种“先来先服务”的规则正是**队列(Queue)**的核心思想!是C++标准模板库(STL)提供的容器适配器,基于其他容器(如。成为你的得力助手——它不仅是容器,更是程序秩序与效率的守护者!以其严格的FIFO规则,成为处理顺序性任务的理想工具。下次当你需要管理“先到先得”的任务流时,不妨让。作为底层容器,但也可指定其他容器(需支持。)实现,专门用于FIFO操作。若指定不兼容的底层容器(如。 阅读详情

项目中有一个需求,求取taxi出行od的最大峰值(taxi od最大交叉值),采用队列处理:
需求示意图如下:
在这里插入图片描述
案例(自制测试数据):
val data = Seq(
(“A”,“2019-01-05 00:23:20”,“2019-01-05 00:27:20”,“2019-1-05”),
(“A”,“2019-01-05 00:25:20”,“2019-01-05 00:37:20”,“2019-1-05”),
(“A”,“2019-01-05 00:35:20”,“2019-01-05 00:40:20”,“2019-1-05”),
(“A”,“2019-01-05 01:25:20”,“2019-01-05 01:37:20”,“2019-1-05”),
(“A”,“2019-01-05 02:25:20”,“2019-01-05 02:37:20”,“2019-1-05”),
(“A”,“2019-01-05 02:26:20”,“2019-01-05 02:30:20”,“2019-1-05”),
(“A”,“2019-01-05 02:27:20”,“2019-01-05 02:28:20”,“2019-1-05”),
(“A”,“2019-01-05 02:27:40”,“2019-01-05 03:37:20”,“2019-1-05”),
(“A”,“2019-01-05 04:25:20”,“2019-01-05 04:57:20”,“2019-1-05”),
(“A”,“2019-01-05 04:35:20”,“2019-01-05 05:37:20”,“2019-1-05”),
(“A”,“2019-01-05 05:00:20”,“2019-01-05 06:37:20”,“2019-1-05”),
(“A”,“2019-01-05 08:25:20”,“2019-01-05 08:37:20”,“2019-1-05”),
(“A”,“2019-01-05 09:25:20”,“2019-01-05 09:37:20”,“2019-1-05”),
(“A”,“2019-01-05 09:35:20”,“2019-01-05 09:47:20”,“2019-1-05”),
(“A”,“2019-01-05 10:35:20”,“2019-01-05 10:47:20”,“2019-1-05”)
).toDF(“carID”,“departTime”,“arrivalTime”,“date”)

  /**
    * 提取大OD
    */
  def getBigOD(data: DataFrame): DataFrame = {
    import data.sparkSession.implicits._
    data.groupByKey(row => row.getAs[String]("carID") + "," + row.getAs[String]("date")).flatMapGroups((str, it) => {
      val indexArr = ArrayBuffer[(Int, Int, String)]() //标记大od划分时对应的records记录下标、最大od数、大od的结束时间
      val res = ArrayBuffer[(String, String, Int, String)]()
      val info = str.split(",")
      val carID = info.head
      val date = info.last
      val records = it.toList.sortBy(_.getAs[String]("arrivalTime"))
      val queue = new Queue[Row]()
      val len_records = records.length
      //当天记录数在2条及以上
      if (len_records >= 2) {
        var maxOdNum = 0 //初始化od数量
        var index = 0 //初始化标记
        var lastTime = "" //大od结束时的时间
        for (record <- records) {
          //首条记录入队
          if (queue.length == 0) {
            queue.enqueue(record)
          } else {
            //判断当前od是否应该加入队列
            val departTime = record.getAs[String]("departTime")
            //遍历队列中的所有od
            var flag = true
            var bg = 0
            while (bg < queue.length && flag) {
              val que = queue(bg)
              val arrivalTime = que.getAs[String]("arrivalTime")
              // 当前od的上车时间若大于队列中od的到达时间,则队列中已存od出队
              if (departTime > arrivalTime) {
                val queueLen = queue.length
                if (queueLen > maxOdNum) maxOdNum = queueLen //队首元素出列前,队列的最大长度赋值给maxOdNum
                queue.dequeue() //队首元素出列
                bg -= 1 //队首元素出列后,下一次依旧从队首元素开始判断(**易忽略**)
              } else {
                queue.enqueue(record)
                flag = false //当前上车时间小于队首元素的下车时间,则不必再往后查看,直接加入当前od即可
              }
              bg += 1
            }
            flag = true //供下一次循环队列使用

            //若队列清空,则表示一次大od划分成功
            if (queue.length == 0) {
              // 出栈元素应该添加至最终的结果集中
              lastTime = records(index-1).getAs[String]("arrivalTime")
              indexArr.append((index-1, maxOdNum, lastTime))
              //清空列表后,需将当前od加入队列中,成为队首元素
              queue.enqueue(record)
              maxOdNum = 0 //maxOdNum值归零
            }
          }

          //插入最后一个元素后,需输出一次
          if (index == len_records - 1) {
            lastTime = records.last.getAs[String]("arrivalTime")
            indexArr.append((index, queue.length, lastTime))
          }
          index += 1
        }
      } else {
        //只有一条记录,直接添加进去即可
        val lastTime = records.last.getAs[String]("arrivalTime")
        indexArr.append((0, 1, lastTime))
      }

      for (ind <- indexArr) {
        res.append((carID, date, ind._2, ind._3))
      }
      //根据indexArr和records生成最终的结果数据集
      res
    }).toDF("carID", "date", "maxOdNum", "endTime")
  }

在这里插入图片描述result:
在这里插入图片描述

数据结构模拟资源管理器项目实战 树形结构是一种非线性的数据结构,它通过分支方式组织数据,形成了层次分明的树状模型。在文件系统中,树形结构被广泛用于表示文件与文件夹(目录)之间的层级关系。每个节点表示一个文件或者一个文件夹,节点之间的连线表示父子关系。在文件系统的管理中,文件操作函数的定义与数据结构的应用是基础同时也是核心环节。这包括了文件操作接口的调用,数据结构的选择及其在文件管理中的运用,并且对于系统性能的影响也需要考量。本章将深入探讨文件操作函数的设计以及数据结构在文件管理中的定义与应用。 阅读详情

相关推荐

数据结构项目

由系统随机生成4张牌,用户利用扑克牌的数字及运算符号“+”、“—”、“*”、“/”及括号“(”和“)”从键盘上输入一个计算表达式,系统运行后判断是否为24.

数据结构实践项目-图书借阅管理系统(附GUI)

输入的形式:输入的内容在文本文件中,通过daoru这个函数将书籍信息导入进程序中,在后面将最新的信息录入到文本文件中采用的是saveBooks这个函数,将一个包含最新图书借阅情况的信息录入到一个新的文本文件中。输入值的范围:其中书籍的ISBN号必须为4位数字,学生的借书证号必须为3位数字,书籍的名称,作者,出版社等未做限制,但书籍的定价不可低于0元,库存不可为负数,最多不可超过1000本。该程序是一个简单的图书借阅管理系统,可以实现图书信息的添加、修改、查找,图书的借阅和归还以及打印所有图书信息等功能。

sakurawithdong的博客 1910

数据结构之项目实战经典案例(文档)

资源名称:数据结构之项目实战经典案例(文档)资源目录:【】1.1学生成绩管理【】1.2考试报名管理【】1.3约瑟夫生者死者游戏【】1.4约瑟夫双向生死游戏【】2.1迷宫旅行游戏【】2.2八皇后问题【】2.3停车场管理【】3.1单词检索统计程序【】3.2Internet网络通路管理【】4.1家谱管理【 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

【数据结构查找算法篇】----二分查找【实战项目】

想象一下,你在一座图书馆里的一排排整齐排列的书架前,这些书按照字母顺序摆放着,你需要找到一本名字以字母"M"开头的书。先站在书架的中间位置,这大致相当于字母顺序的“M”附近。如果你手上的书以字母“S”开头,那么你知道“M”开头的书应该在你左边的上。你忽略右半部分的书架,将范围缩小到左半部分。然后你去左边书架的中间位置,重复进行查找。如果这次拿到的书以字母“G”开头,意味着“M”会在你右手边的书架上。再次缩小范围,只考虑“G”和“S”之间的部分,并在这个缩小后的范围内继续寻找。

m0_71685576的博客 1671

数据结构实例(内含17个详细经典实例)

数据结构实践教程:内含17个经典数据结构实例 根据五个不同数据结构,对每个结构都有2~4个经典实例。每个实例都有项目简介、设计思路、数据结构、完整程序、运行结果五个部分,可以直接拿来做一篇课程设计。实例名称有:学生成绩管理系统、考试报名管理、约瑟夫生者死者游戏、迷宫旅行游戏、八皇后问题、停车场管理、单词检索统计程序、Internet网络通路、家谱管理、

内存设计指南:01 Xilinx DDR4 design guide解析

最近有很多网友咨询FPGA DDR4为什么速率总是上不去的问题,发现他们的设计确实很随意,都没有遵守一些手册的基本要求,所以今天和大家一起重新读一读DDR4 design guide,看看哪些要求是一定不能忽略的。首次设计一款新的芯片或者内存方案时,可能会无从下手。对于内存设计,官方指导首推JEDEC规范,每一代内存推出时,在JEDEC官网均能找到对应的规范文档、各种内存形式的说明文档如DDR4-JESD79、DDR4 SDRAM UDIMM Design Specification以及内存条DEMO等。

halee_00的博客 3302

数据结构与算法在实战项目中的应用

该视频教程教大家将学到的数据结构与算法知识应用到实际项目开发中,真正的做到学以致用,理论联系实际,课程会从基本的数据结构算法讲起,结合着实际项目开发,由浅入深,更加贴近实战,让学习者真正的掌握算法应用,可以在工作中直接将其应用到项目开发中。

Python与西门子PLC数据交互实战:基于Snap7的跨平台工业通信指南

本文详细介绍了如何使用Python和Snap7库实现与西门子PLC的数据交互。内容涵盖跨平台环境搭建、连接参数配置、数据读写实战及性能优化技巧,为工业自动化、数据采集和智能制造场景提供了一套轻量、灵活且高效的通信解决方案。

vim8coder的博客 291

queue的长度_【c# .net】队列(Queue)

队列(Queue)1.简介队列(Queue)代表了一个先进先出的对象集合。注意:先进先出指的是先添加的元素会排在集合的顶部也就是最前面,按照从前往后添加元素的规则就像一条单行隧道只能从一端进入,从另一端出去队列(queue)是一种线性数据结构,它的特征和行驶车辆的单行隧道 很相似。不同于栈的后进先出,队列中的元素只能先入先出 (First In First Out,简称FIFO )。队列的出口端叫...

weixin_39747568的博客 2924

深入解析线性反馈移位寄存器(LFSR)的工作原理与实现

本文深入解析了线性反馈移位寄存器(LFSR)的核心原理与实现方法。通过生动的比喻和详细的步骤拆解,阐述了LFSR如何通过反馈多项式和移位操作生成伪随机序列,并对比了斐波那契型与伽罗瓦型两种硬件结构。文章还涵盖了LFSR在数字电路测试、通信扰码及快速伪随机数生成等关键应用场景,同时指出了其在密码学中的局限性,并提供了Python和C语言的高效实现代码示例。

weixin_29007243的博客 545

树莓派安装snowboy

1、树莓派换源 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113615915 2、更新pip3 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113616214 3、存取麦克风 我们使用PortAudio作为音频输入/输出的跨平台支持。我们还使用sox作为快速实用程序来检查麦克风设置是否正确。 sudo apt-get install python-pyaudio python

qq_43556844的博客 1923

C++——stack与queue

《C++——stack与queue》 求点赞收藏评论关注!!! 十分感谢各位大佬的支持!!!

2301_80401288的博客 1852

基因组研究之单倍型T2T基因组(一)

单倍型T2T基因组(Haplotype-resolved T2T genome)是一种高精度、高连续性、高完整性的基因组组装技术,它能够提供从端粒到端粒的完整基因组序列,包括所有的基因和非编码序列。完整覆盖:T2T基因组覆盖从端粒到端粒的染色体序列,包含所有的基因和非编码序列,包括以往难以解析的端粒和着丝粒区域。单倍型解析:单倍型T2T基因组能够区分来自父母本的遗传信息,进行亚基因组不对称演化研究,挖掘单倍型等位基因间的表达差异,这对于重测序、性状定位、进化、基因功能、基因编辑等研究至关重要。

2401_89507557的博客 2442

STL(C++)——stack类和queue类模板

我们接下来的这篇博客所要讲的内容就是我们前面在数据结构部分已经讲过的stack和queue部分的内容,与之不同的是,我们这里来讲讲它的模板,这里模板的底层实现和我们在数据结构中所讲述的知识基本上是如出一辙的,主要还是以使用的讲解为主要讲解部分。我在这里为大家推荐一个英语的相关网站,希望对大家在学习STL时能够有所帮助。

2301_81390458的博客 2146

电子元器件基础:电阻、电容、电感的特性与应用解析

本文深入解析了电子元器件中电阻、电容和电感三大基础元件的核心特性、工作原理与选型应用。电阻作为电路中的‘交通警察’,控制电流与分配电压,其额定功率与精度是关键选型参数。文章结合实战经验,详细阐述了它们在电源滤波、信号处理及高频电路中的不同表现与避坑指南,是电子设计与维修的必备基础知识。

weixin_29213655的博客 379

YOLOv10改进,YOLOv10二次创新C2f结构采用WTConv卷积(感受野的小波卷积),ECCV 2024

WTConv 的核心思想是通过结合卷积神经网络(CNN)的强大特征提取能力与小波变换的多尺度特性,来实现大感受野的卷积操作,同时避免传统大卷积核带来的参数爆炸问题。传统的卷积操作通过滑动小窗口在图像上逐步执行局部特征提取,感受野的大小直接取决于卷积核的尺寸。随着卷积核的增大,参数量呈指数增长,导致网络训练效率降低、计算资源消耗增加。为解决这些问题,WTConv 提出了在小波域中执行卷积操作的策略。小波变换是一种常用于信号处理的技术,能够将信号分解为不同频率成分。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1024

yocto-queue 项目常见问题解决方案

yocto-queue 项目常见问题解决方案 项目基础介绍 yocto-queue 是一个非常小巧的队列数据结构库,旨在替代 JavaScript 中的数组操作。它特别适用于需要频繁进行 Array#push() 和 Array#shift() 操作的场景。由于 Array#shift() 的时间复杂度为 O(n),而 yocto-queue 的 Queue#dequeue() 时间复杂度为 O(...

gitblog_00796的博客 594

零基础做AI漫剧:Kimi K2.5写本 + Flux生图 + Seedance 2.0动效的保姆级教程

很多零基础小伙伴想做AI漫剧,却被“写剧本、画分镜、做动效”三大难题劝退——不会写剧情、不会画插画、不会做动态,觉得门槛太高。其实不用慌!今天就给大家带来保姆级教程,全程用Kimi K2.5(写剧本)、Flux(生分镜图)、Seedance 2.0(做动效)三个工具,不用专业技能,不用手动绘画,零基础也能在1小时内做出1分钟完整AI漫剧,全程步骤拆解、示例齐全,跟着做就能出片!

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 3043

queue使用方法

queue使用方法 提示: 如果队列满了,那么使用put放入数据会等待,直到队列有空闲位置才可以放入 放入消息的时候不会进行等待,如果发现队列满了不能放入数据,那么会直接崩溃 import multiprocessing import time if __name__ == '__main__': # 创建消息队列 # 3:表示消息队列的最大个数 queue = mult...

巨基的博客 8403

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java list 作为queue_数据结构 - 如何在java中实例化Queue对象?

数据结构 - 如何在java中实例化Queue对象?当我尝试:Queue q = new Queue();编译器给我一个错误。 有帮助吗?另外,如果我想初始化队列,我是否必须实现队列的方法?8个解决方案139 votesQueue是一个接口,这意味着您无法直接构造AbstractQueue。最佳选择是构造已经实现Queue接口的类,如下所示之一:AbstractQueue,ArrayBlockin...

weixin_35751412的博客 491

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java数据结构queue方法_Java 程序实现队列(Queue)数据结构

Java 程序实现队列(Queue)数据结构在这个实例中,我们将学习用Java实现队列数据结构。要了解此示例,请确保您首先访问以下教程,示例1:实现堆栈的Java程序示例publicclassQueue{intSIZE=5;intitems[]=newint[SIZE];intfront,rear;Queue(){front=-1;rear=-1;}//检查队列是...

weixin_29201859的博客 255

Java:queue队列,map集合

Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口 示例代码: 1. import java.util.LinkedList; 2. import java.util.Queue; 3. 4. public class QueueDemo { 5. ...

weixin_42530700的博客 1351

iOS算法进阶:100天数据结构与算法实战之队列(Queue)深度解析

在iOS开发中,**队列(Queue)** 是一种至关重要的数据结构,它遵循"先进先出"(FIFO)的原则。无论你是正在学习iOS算法的新手,还是希望提升数据结构理解的中级开发者,掌握队列都是迈向**iOS算法进阶**的关键一步。本文将为你深度解析队列在iOS中的实现与应用,帮助你在**100天数据结构与算法实战**中快速掌握这一核心概念。 ## 🎯 什么是队列?为什么iOS开发者需要掌握它?

gitblog_01181的博客 390

终于,我读懂了所有Java集合——queue篇

Stack 基于Vector实现,支持LIFO。 类声明 public class Stack<E> extends Vector<E> {} push public E push(E item) { addElement(item); return item; } pop public synchronized E pop() { ...

少说,多做。 1万+

python3 queue的一些参数的尝试

python3 的queue 的参数,block、timeout queue队列默认block=True; 这会使得,在进行队列操作时,出现队列为空,或满了,程序会进入阻塞状态,等待超时。 import queue from time import sleep q = queue.Queue(10) for i in range(20): print(i) q.put(i, t...

weixin_43198168的博客 1180

stack 和 queue容器的介绍和使用

队列(queue)系那个寻大家爱都已对此十分的熟悉了,大家在学习之前也可以先来阅读以下下面的这篇文档哈 🌈 🌈函数声明接口说明queue构造空的队列empty检测队列是否为空,是返回true, 否则返回falsesize返回队列中的元素front返回对头元素的引用back返回队尾元素的引用push在队尾将元素val插入队列pop将对头元素出队列介绍文档优先队列是一种容器适配器,更具严格的弱排序标准,他的第一个元素总是它所包含元素的中的最大值。

2302_79964175的博客 1411
上一篇: 记一次spark 写入pgsql异常及解决
下一篇: pandas绘图线条颜色大全
小糖宝
博客等级 码龄9年 47粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值