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

线性数据结构-队列

队列(Queue)是一种先进先出(First In First Out, FIFO)的数据结构,它按照元素进入的顺序来处理元素。队列的基本操作包括:

  • enqueue:在队列的末尾添加一个元素。
  • dequeue:移除队列的第一个元素,并返回被移除的元素。
  • front 或 peek:返回队列的第一个元素,但不移除它。
  • isEmpty:检查队列是否为空。
  • size:返回队列中元素的数量。

数组实现队列

  • 内存连续性:数组在内存中是连续分配的,这有助于利用现代处理器的缓存机制,提高访问速度。
  • 动态扩容:数组需要预先定义大小或动态扩容。动态扩容涉及到创建新数组并复制旧数组元素的操作,这个操作的时间复杂度为O(n)。
  • 插入和删除操作:在队列末尾插入元素(enqueue)的时间复杂度为O(1),但在队列开头删除元素(dequeue)时,由于需要移动所有后续元素,时间复杂度也为O(n)。不过,如果只在数组末尾进行操作,这个复杂度可以降低到O(1)。
class Queue {contructor(){this._queue = [];}isEmty() {return this._queue.length === 0;}enqueue(value) {this._queue.push(value);}dequeue() {if (this.isEmty()) {return undefined;}return this._queue.shift();}size() {return this._queue.length;}peek() {if (this.isEmty()) {return undefined;}return this._queue[0];}
}

链表实现队列

  • 内存分配:链表节点在内存中可以分散分配,不需要连续的内存空间。
  • 动态大小:链表可以根据需要动态地分配节点,不需要担心扩容问题。
  • 插入和删除操作:在链表队列的末尾插入元素(enqueue)和从头部删除元素(dequeue)的时间复杂度都为O(1),因为只需要改变指针的指向。
  • 额外开销:链表操作涉及到额外的指针操作,可能会有一些性能开销,尤其是在js中,对象和指针的处理通常比原始数据类型慢。
class Node {constructor(value){this.value = value;this.next  = null;}
}class Queue {contructor(){this._front = nullthis._rear = nullthis._size = 0}isEmty() {return this._size === 0;}size() {return this._size;}dequeue() {if (this.isEmty()) {return undefined;}this._size--const removeNode = this._frontthis._front = this._front.nextif (this.isEmty()) {this._rear = null}return removeNode.value;}enqueue(value) {const newNode = new Node(value)if (this.isEmty()) {this._front = newNodethis._rear = newNode} else {this._rear.next = newNodethis._rear = newNode}this._size++}peek() {if (this.isEmty()) {return undefined;}return  this._front.value;}
}

相关文章:

线性数据结构-队列

队列(Queue)是一种先进先出(First In First Out, FIFO)的数据结构,它按照元素进入的顺序来处理元素。队列的基本操作包括: enqueue:在队列的末尾添加一个元素。dequeue:移除队列的第…...

python脚本将视频抽帧为图像数据集

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…...

Xmind导入纯文本TXT方法

最近有很多同事咨询我如何在xmind直接导入纯文本txt笔记或者思维导图呢? 解决办法如下: 1.先打开xmind随便打开一个思维导图-文件-导出-marldown 2.选中导出的markdown文件。右键-打开方式-苹果系统选择文本编辑,Win系统选择记事本 3.按照图示…...

深度学习在老年痴呆检测中的应用:数据集综述

深度学习在老年痴呆检测中的应用:数据集综述 引言 老年痴呆(Alzheimer’s Disease, AD)是一种神经退行性疾病,主要影响老年人,导致记忆力、认知能力和行为的逐步衰退。早期检测和诊断对于延缓疾病进展、提高患者生活质量至关重要。近年来,深度学习技术在医学影像分析和…...

【FreeRTOS】内存管理笔记

一、为什么要自己实现内存管理? 后续的章节涉及这些内核对象:task、queue、semaphores和event group等。为了让FreeRTOS更容 易使用,这些内核对象一般都是动态分配:用到时分配,不使用时释放。使用内存的动态管理功能&…...

【数据结构】二叉树:一场关于节点与遍历的艺术之旅

专栏引入 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我想让大家…...

arm系统中双网卡共存问题

文章目录 单网卡单独运行双网卡共存问题双网卡解决方案方案一方案二方案三验证双网卡通过网卡名获取IP通过TCP与服务端通信参考单网卡单独运行 双网卡共存问题 双网卡解决方案 方案一 https://blog.csdn.net/HowieXue/article/details/75937972 方案二 http://bbs.witech…...

IDEA创建Mybatis项目

IDEA创建Mybatis项目 第一步:创建库表 -- 创建数据库 create database mybatis_db;-- 使用数据库 use mybatis_db;-- 创建user表 CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,email VARC…...

排序---快速排序

前言 个人小记 一、代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_ARR 100000 #define swap(a,b)\ {\__typeof(a) __ca;\ab,b__c;\ } #define TEST(func ,arr,l,r)\ {\int nr-l;\printf("tes…...

#08【面试问题整理】嵌入式软件工程师

前言 本系列博客主要记录有关嵌入式方面的面试重点知识,本系列已经更新的篇目有如下: ​ 1.1进程线程的基本概念 1.2 并发,同步,异步,互斥,阻塞,非阻塞的理解 1.3 孤儿进程、僵尸进程、守护进程的概念 3.1 TCP UDP 【本篇】3.2 三次握手、四次挥手...

统计绘图 | 一行代码教你绘制顶级期刊要求配图

在分享完即可统计又可可视化绘制的优秀可视化包后(具体内容可看 统计绘图 | 既能统计分析又能可视化绘制的技能 。就有小伙伴私信问我需要绘制出版级别的可视化图表有什么快速的方法&#xff1f;“。鉴于我是一个比较宠粉的小编&#xff0c;几天就给大家推荐一个技巧&#xff0…...

[ue5]建模场景学习笔记(6)——必修内容可交互的地形,交互沙(4)

1.需求分析&#xff1a; 现在我们已经有了可以在世界内近于无限的跑动痕迹&#xff0c;现在需要对痕迹进行细化&#xff0c;包括例如当人物跳起时便不再绘制痕迹&#xff0c;以及痕迹应该存在深浅&#xff0c;应该由两只脚分别绘制&#xff0c;同时也应该对地面材质进行进一步处…...

5.2 参照完整性

5.2.1 外键约束 语法格式&#xff1a;constraint < symbol > foreign key ( col_nam1[, col_nam2... ] ) references table_name (col_nam1[, col_nam2...]) [ on delete { restrict | cascade | set null | no action } ] [ on update { restrict | cascade | set nu…...

SpringCache 缓存 - @Cacheable、@CacheEvict、@CachePut、@Caching、CacheConfig 以及优劣分析

目录 SpringCache 缓存 环境配置 1&#xff09;依赖如下 2&#xff09;配置文件 3&#xff09;设置缓存的 value 序列化为 JSON 格式 4&#xff09;EnableCaching 实战开发 Cacheable CacheEvict CachePut Caching CacheConfig SpringCache 的优势和劣势 读操作…...

数据结构 —— 堆

1.堆的概念及结构 堆是一种特殊的树形数据结构&#xff0c;称为“二叉堆”&#xff08;binary heap&#xff09; 看它的名字也可以看出堆与二叉树有关系&#xff1a;其实堆就是一种特殊的二叉树 堆的性质&#xff1a; 堆中某个结点的值总是不大于或不小于其父结点的值&…...

【运维】如何更换Ubuntu默认的Python版本,update-alternatives如何使用

update-alternatives 是一个在 Debian 及其衍生发行版中&#xff08;包括 Ubuntu&#xff09;用于管理系统中可替代项的命令。它可以用于在系统中设置默认的软件版本&#xff0c;例如在不同版本的软件之间进行切换&#xff0c;比如不同的 Python 版本。 要在 Ubuntu 中使用 up…...

2024 年适用于 Linux 的 5 个微软 Word 替代品

对于那些最近由于隐私问题或其他原因而转向 Linux 的用户来说&#xff0c;可能很难替换他们最喜欢的、不在 Linux 操作系统上运行的应用程序。 寻找流行程序的合适替代品可能会成为一项挑战&#xff0c;而且并不是每个人都准备好花费大量时间来尝试弄清楚什么可以与他们在 Win…...

大模型日报2024-06-12

大模型日报 2024-06-12 大模型资讯 NVIDIA发布GB200 Grace Blackwell AI超级芯片 摘要: NVIDIA近日宣布推出GB200 Grace Blackwell超级芯片和Blackwell B200 GPU&#xff0c;这些新技术将推动人工智能领域的发展。 阿布扎比TII发布下一代Falcon语言模型 摘要: 阿布扎比的技术创…...

LVGL欢乐桌球游戏(LVGL+2D物理引擎学习案例)

LVGL欢乐桌球游戏&#xff08;LVGL2D物理引擎学习案例&#xff09; 视频效果&#xff1a; https://www.bilibili.com/video/BV1if421X7DL...

国产数字证书大品牌——JoySSL

一、品牌介绍 网盾安全旗下品牌JoySSL是专业的https安全方案服务商&#xff0c;业务涉及网络安全技术服务、安全防护系统集成、数据安全软件开发等。网盾安全以网络安全为己任&#xff0c;携手GlobalSign、DigiCert 、Sectigo等全球数家权威知名SSL证书厂商&#xff0c;加速ht…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...