数据结构与算法-队列

2023-11-16

  • 定义
    队列是ListInsert发生表尾、ListDelete发生在表头的线性表,主要操作:入队、出队。在这里插入图片描述

  • 术语
    表头-队头,表尾-队尾,插入-入队,删除-出队

  • 特点

  1. 先入先出(FIFO)
  2. 插入的位置是length+1,删除的位置的是1,一般读取第1个数据元素

循环队列(Circular Queue)

顺序队列的假溢出问题

在这里插入图片描述

队列上溢出
  • 真上溢:队列真正满时再入队。
  • 假上溢:rear已指向队尾,但队列前端仍有空位置。
  • 解决假上溢的方法
    方法一:每次删除队头一个元素后,把整个队列往前移一个位置(造成时间浪费)。
    方法二:使用循环队列方法二:使用循环队列
循环队列-基本思想
  • 首位相连:把a[0]和a[5]想象成邻居

在这里插入图片描述

循环队列-满与空的判定

循环队列空和满,队头和队尾相连,如何区分?
在这里插入图片描述

解决方法
  1. 另外设置一个标志,以区别队空、队满;
  2. 少用一个元素空间
    队空:front = = rear
    队满:(rear+1)%M = = front

在这里插入图片描述

优先队列(Priority Queue)

优先队列是正常入,按照优先级出的队列。

实现机制
  • Heap(Binary,Binomial,Fibonacci)
  • Binary Search Tree

小顶堆(Mini Heap)
在这里插入图片描述
大顶堆(Max Heap)

在这里插入图片描述

各种堆实现的时间复杂度对比图
在这里插入图片描述

java.util.PriorityQueue

java.util.PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。
参考:https://www.cnblogs.com/CarpenterLee/p/5488070.html

LeetCode[703]Kth largest Element in a Stream
description

Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.

Your KthLargest class will have a constructor which accepts an integer k and an integer array nums, which contains initial elements from the stream. For each call to the method KthLargest.add, return the element representing the kth largest element in the stream.

Example

int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3); // returns 4
kthLargest.add(5); // returns 5
kthLargest.add(10); // returns 5
kthLargest.add(9); // returns 8
kthLargest.add(4); // returns 8

Note

You may assume that nums’ length ≥ k-1 and k ≥ 1.

code
class KthLargest {
final PriorityQueue<Integer> q;
    final int k;
    
    public KthLargest(int k, int[] a) {
        this.k = k;
        q = new PriorityQueue<>(k);
        for (int n : a)
            add(n);
    }

    public int add(int n) {
        if (q.size() < k)
            q.offer(n);
        else if (q.peek() < n) {
            q.poll();
            q.offer(n);
        }
        return q.peek();
    }
}

/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest obj = new KthLargest(k, nums);
 * int param_1 = obj.add(val);
 */

运行结果:
在这里插入图片描述

阻塞队列(Blocking queue)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法-队列 的相关文章

  • STL deque 源码——deque特点、实现框架、源码分段剖析、常用函数总结(上)

    一 deque的一些特点 支持随机访问 即支持 以及at 但是性能没有vector好 可以在内部进行插入和删除操作 但性能不及list deque 两端 都能够快速插入和删除元素 而vector只能在尾端进行 deque的元素存取和迭代器操
  • 4399 C++笔试题

    1 写出一个函数 取到链表中倒数第二个节点 双链表 node getSec List mylist return mylist m tail gt m prev m prev为链表前指针 单链表 node getSec List mylis
  • PHP如何使用Ds\Queue Capacity()函数?代码实例

    Ds Queue capacity PHP中的函数用于检查Queue实例的当前容量 语法 int public Ds PriorityQueue capacity void 参数 此功能不接受任何参数 返回值 此函数返回Queue实例的当前
  • Hash table and application in java

    查找的效率取决于在查找是比较的次数 次数越少效率越高 反之越低 最理想的情况是无需比较 一次存取便能找到所查找的记录 根据对应关系f找到给定值K的像f K hash function 应运而生 由此思想建的表称为hash table 集合h
  • 用 Java 实现的八种常用排序算法

    八种排序算法可以按照如图分类 前置知识 1 算法稳定性 在一个序列中 能保证两个相等的数 经过排序之后 其在序列的前后位置顺序不变 A1 A2 排序前 A1 在 A2 前面 排序后 A1 还在 A2 前面 2 时间复杂度 时间复杂度是用于衡
  • 栈(Stack)——class Stack 和 class Stack T 实现

    对于Stack类的实现 跟之前链表实现也一样 只是封装成为面向对象的类了 PS 这里是线式存储的类和模板实现 链表式的实际上写法也是一样的 class Stack代码如下 mystack h include
  • DDP入门

    DDP 即动态动态规划 可以用于解决一类带修改的DP问题 我们从一个比较简单的东西入手 最大子段和 带修改的最大子段和其实是常规问题了 经典的解决方法是用线段树维护从左 右开始的最大子段和和区间最大子段和 然后进行合并 现在我们换一种方法来
  • 递归算法中的时间复杂度分析

    对于一种算法的时间复杂度分析还是特别重要的 在一些非递归算法中 我们仅仅看运算次数最多的那一行代码可能执行多少次就可以 实际就是看在循环中变量的变化 但是对于递归算法中该怎么分析呢 下面介绍几种递归函数中的算法时间复杂度分析的方法 0 递推
  • 循环单链表(C语言版)

    前言 小可爱们 本次一起来看看循环单链表吧 嘻嘻 一 循环单链表的定义 循环单链表是单链表的另一种形式 其结构特点链表中最后一个结点的指针域不再是结束标记 而是指向整个链表的第一个结点 从而使链表形成一个环 和单链表相同 循环链表也有带头结
  • 数据结构与算法书籍推荐

    学习数据结构与算法 还是很有必要看几本相关的书籍 但根据不同基础的人 合适看的书也不一样 因此 针对不同层次 不同语言的人 推荐几本市面上口碑不错的书 1 入门级 针对刚入门的同学 建议不要急着去看那些经典书 像 算法导论 算法 这些比较经
  • UE4命令行使用,解释

    命令行在外部 从命令行运行编辑项目 1 导航到您的 LauncherInstall VersionNumber Engine Binaries Win64 目录中 2 右键单击上 UE4Editor exe 的可执行文件 并选择创建快捷方式
  • 链表面试题(一):反转链表的算法实现

    关于链表的考察 链表是面试里面经常涉及到的考点 因为链表的结构相比于Hashmap Hashtable Concurrenthashmap或者图等数据结构简单许多 对于后者更多面试的侧重点在于其底层实现 比如Hashmap中Entry
  • JavaScript系列——数组元素左右移动N位算法实现

    引言 在自己刚刚毕业不久的时候 去了一家公司面试 面试官现场考了我这道题 我记忆深刻 当时没有想到思路 毫无疑问被面试官当成菜鸟了 最近刚好在研究数组的各种算法实现 就想到这道题 可以拿来实现一下 纪念自己逝去的青春 需求 假设有这样一个数
  • 如何防止过拟合和欠拟合

    过拟合和欠拟合是模型训练过程中经常出现的问题 两种情况正好相反 现将两者的定义及如何防止进行简要总结 1 过拟合 1 1 定义 是指模型对于训练数据拟合呈现过当的情况 反映到评估指标上就是模型在训练集上的表现很好 但是在测试集上的表现较差
  • 区块链中的哈希算法

    区块链中的密码学 密码学在区块链中的应用主要有两个 哈希算法与非对称加密算法 这次主要对哈希算法进行详细的说明 哈希算法 哈希算法的特点有 1 输入可以为任意大小的字符串 2 产生固定大小的输出 3 可以在合理的时间内算出输出值 若要满足密
  • 索引优化之Explain 及慢查询日志

    索引 本质是数据结构 简单理解为 排好序的快速查找数据结构 以索引文件的形式存储在磁盘中 目的 提高数据查询的效率 优化查询性能 就像书的目录一样 优势 提高检索效率 降低IO成本 排好序的表 降低CPU的消耗劣势 索引实际也是一张表 该表
  • Leetcode1094. 拼车

    Every day a Leetcode 题目来源 1094 拼车 解法1 差分数组 对于本题 设 a i 表示车行驶到位置 i 时车上的人数 我们需要判断是否所有 a i 都不超过 capacity trips i 相当于把 a 中下标从
  • 牛客剑指offer刷题其他算法篇

    文章目录 构建乘积数组 题目 思路 代码实现 第一个只出现一次的字符
  • 数组实现循环队列(增设队列大小size)

    目录 一 前言 1 如何实现循环 2 如何判断队列为空 3 如何判断队列为满 二 循环队列的结构定义 三 循环队列的创建及其初始化 四 入队 五 出队 六 取队头元素 七 取队尾元素 八 循环队列判空 九 循环队列判满 十 循环队列销毁 一
  • C++ AVL树(四种旋转,插入)

    C AVL树 四种旋转 插入 一 AVL树的概念及性质 二 我们要实现的大致框架 1 AVL树的节点定义 2 AVL树的大致框架 三 插入 1 插入逻辑跟BST相同的那一部分 2 修改平衡因子

随机推荐

  • Building Simulation Packet-Loss System in Channel

    Step 1 Produce a series of random frame numbers There is three input GOP and loss ratio For instance there is a 264 with
  • json文件怎么写注释

    1 使用编辑器打开json文件 现在是没有注释内容的 如果没有的话需要下载安装 2 一个json文件 其实就是一个js脚本文件 我们可以使用 的单行注释符 3 也可以使用 符号来支持多行注释 4 我们可以使用重复定义的方法来添加注释 jso
  • 微信小程序:分享一个百度地图微信小程序api

    分享一个百度地图微信小程序api http lbsyun baidu com index php title wxjsapi 使用也比较简单 天气就是以前车辆网的api 支持https 免费 支持POI查询 默认返回生活服务 美食 酒店三种
  • 柯洁终结神秘AI棋手41连胜 表示信心大增今夜未眠

    大型年度AI人物评选 2017中国AI英雄风云榜 评选进行中 奖项设置 技术创新人物TOP 10 商业创新人物TOP 10 表彰人物 华人科学家 学者 企业家 创业者 评委阵容 资深媒体人 AI投资人 AI专业机构等 颁奖 2017年12月
  • selenium官文文档阅读总结(day 3)

    1 关联型xpath的用法 driver find element By XPATH a text xxx ancestor 祖先元素的标签名 2 selenium等待 等待的作用 在系统运行的过程中 等待网页内容的加载显示 需要耗费的时间
  • 华为校招机试 - 工单调度策略(Java)

    题目描述 当小区通信设备上报警时 系统会自动生成待处理的工单 华为工单调度系统需要根据不同的策略 调度外线工程师 FME 上站修复工单对应的问题 根据与运营商签订的合同 不同严重程度的工单被处理并修复的时长要求不同 这个要求被修复的时长我们
  • 使用Go语言爬取网页并将其保存为图片

    要使用Go语言爬取网页并将其保存为图片 你可以使用Go的第三方库来实现 以下是一个使用chromedp库的示例代码 它使用Chrome浏览器的Headless模式来访问网页并截取屏幕截图 package main import contex
  • Mrtk 如何动态开启关闭网格渲染

    protected void Show IMixedRealityDataProviderAccess dataProviderAccess CoreServices SpatialAwarenessSystem as IMixedReal
  • Unity编辑器随机生成物体,更换场景之后物体丢失问题解决

    前言 obj GameObject PrefabUtility InstantiatePrefab configData bigMainScene 我在编辑器开发的时候实例化预制体到场景中之后 在跳转场景之后 然后在返回实例化过物体的场景会
  • 【Ansible自动化运维实战】使用Asible批量部署yum仓库

    Ansible自动化运维实战 使用Asible批量部署yum仓库 一 时间要求及目的 二 playbook内容 三 运行palybook 一 时间要求及目的 使用华为镜像源作为yum仓库批量分发达到所有受控端 二 playbook内容 ro
  • 【成电860考研】电子科技大学软件工程860考研专业课真题考频总结

    博主最近考研上岸啦 成电软件工程860专业课考了122 总分不高 这篇文章主要介绍专业课 我就不分享别的啦 博主考研的时候收集了几乎全网的资料 找到了几乎所有能找到的860资料进行汇总分析 得到了最后的真题考频 为了帮助学弟学妹们 博主决定
  • 4261. 孤独的照片

    数据范围为500 000 所以应该控制在O nlogn 或O n 我们发现要枚举的子串它其中有一个字母只出现一次 所以 我们可以去枚举只出现一次的字母是哪个 假设在第i个位置的字母为G 我们要枚举包含这个字母的 且只包含一个G的 且长度大于
  • QGroupBox布局中简单的操作

    QGroupBox中布局各个控件的使用 注意 我是先用了Qt designer设计 然后根据转成的 py文件代码 进行适当修改得到的 将进行三个示例讲解 目录 QGroupBox上添加栅格布局 某一组件充满整个QGroupBox QGrou
  • 抖音小程序实践三:接口开发指南

    通过官方文档可以更系统的学习到所有的接口 我这边罗列一下我自己用到测试过的接口供大家参考 前端 小程序对接官方文档 https microapp bytedance com docs zh CN mini app develop api o
  • RDMA技术详解——DMA和RDMA概念

    1 1 DMA DMA Direct Memory Access 直接内存访问 是一种能力 允许在计算机主板上的设备直接把数据发送到内存中去 数据搬运不需要CPU的参与 如下图所示 红线部分为传统内存访问 需要通过CPU进行数据copy来移
  • python导入数学函数_Python 数学函数模块(Math)

    1 内置的数学函数 min 和max 函数可用于查找可迭代的最小值或最大值 例如 x min 5 10 25 y max 5 10 25 print x print y abs 函数返回指定数字的绝对 正 值 例如 x abs 7 25 p
  • 微信小程序之 navigateTo

    navigateTo页面跳转传参 使用标签的方式跳转 变量需要 A页面
  • UE-从鼠标出进行射线检测

    第一种方式 Convert Mouse Location To World Space 将鼠标屏幕2D位置转换为场景空间3D位置和方向 将鼠标位置从2D转换成3D 第二种方式 Deprohiect Screen to World 将给定的2
  • 自动化驱动程序管理

    在部署操作系统时 每次都从下载和分发所需的驱动程序中实现真正的独立性可能是一场艰苦的战斗 特别是具有硬件多样化的环境 并且需要支持新的硬件类型时 借助 OS Deployer 可以对所有端点使用一个映像 无论品牌和型号如何 驱动程序将自动处
  • 数据结构与算法-队列

    定义 队列是ListInsert发生表尾 ListDelete发生在表头的线性表 主要操作 入队 出队 术语 表头 队头 表尾 队尾 插入 入队 删除 出队 特点 先入先出 FIFO 插入的位置是length 1 删除的位置的是1 一般读取