当前位置: 首页 > 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;}
}
http://www.lryc.cn/news/370609.html

相关文章:

  • python脚本将视频抽帧为图像数据集
  • Xmind导入纯文本TXT方法
  • 深度学习在老年痴呆检测中的应用:数据集综述
  • 【FreeRTOS】内存管理笔记
  • 【数据结构】二叉树:一场关于节点与遍历的艺术之旅
  • arm系统中双网卡共存问题
  • IDEA创建Mybatis项目
  • 排序---快速排序
  • #08【面试问题整理】嵌入式软件工程师
  • 统计绘图 | 一行代码教你绘制顶级期刊要求配图
  • [ue5]建模场景学习笔记(6)——必修内容可交互的地形,交互沙(4)
  • 5.2 参照完整性
  • SpringCache 缓存 - @Cacheable、@CacheEvict、@CachePut、@Caching、CacheConfig 以及优劣分析
  • 数据结构 —— 堆
  • 【运维】如何更换Ubuntu默认的Python版本,update-alternatives如何使用
  • 2024 年适用于 Linux 的 5 个微软 Word 替代品
  • 大模型日报2024-06-12
  • LVGL欢乐桌球游戏(LVGL+2D物理引擎学习案例)
  • 国产数字证书大品牌——JoySSL
  • Codeforces Global Round 26 D. “a“ String Problem 【Z函数】
  • Next.js 加载页面及流式渲染(Streaming)
  • 形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现
  • DockerCompose+Jenkins+Pipeline流水线打包SpringBoot项目(解压安装配置JDK、Maven等)入门
  • Web前端开发个人技能全面剖析:四维度深度理解,五能力实战展现,六要素构建优势,七步骤持续精进
  • 如何让 uboot启动时自动执行指令?(执行“mtdparts default”命令)
  • Java的集合框架总结
  • 基于DenseNet网络实现Cifar-10数据集分类
  • 我的“工具”库
  • Pytorch常用函数用法归纳:Tensor张量之间的计算
  • 小公司要求真高