数据结构与前端(二)-队列

本文深入探讨了队列这一线性数据结构的概念,包括其基本特性及操作,并详细讲解了单链队列与循环队列的实现方式。通过对比两种队列的优缺点,帮助读者理解如何选择合适的队列类型。

概念

队列一个线性结构,特点是在某一端添加数据,在另一端删除数据,遵循先进先出的原则。

640?wx_fmt=png

实现

这里会讲解两种实现队列的方式,分别是单链队列和循环队列。

单链队列

class Queue {	
  constructor() {	
    this.queue = []	
  }	
  enQueue(item) {	
    this.queue.push(item)	
  }	
  deQueue() {	
    return this.queue.shift()	
  }	
  getHeader() {	
    return this.queue[0]	
  }	
  getLength() {	
    return this.queue.length	
  }	
  isEmpty() {	
    return this.getLength() === 0	
  }	
}

因为单链队列在出队操作的时候需要 O(n) 的时间复杂度,所以引入了循环队列。循环队列的出队操作平均是 O(1) 的时间复杂度。

循环队列

class SqQueue {	
  constructor(length) {	
    this.queue = new Array(length + 1)	
    // 队头	
    this.first = 0	
    // 队尾	
    this.last = 0	
    // 当前队列大小	
    this.size = 0	
  }	
  enQueue(item) {	
    // 判断队尾 + 1 是否为队头	
    // 如果是就代表需要扩容数组	
    // % this.queue.length 是为了防止数组越界	
    if (this.first === (this.last + 1) % this.queue.length) {	
      this.resize(this.getLength() * 2 + 1)	
    }	
    this.queue[this.last] = item	
    this.size++	
    this.last = (this.last + 1) % this.queue.length	
  }	
  deQueue() {	
    if (this.isEmpty()) {	
      throw Error('Queue is empty')	
    }	
    let r = this.queue[this.first]	
    this.queue[this.first] = null	
    this.first = (this.first + 1) % this.queue.length	
    this.size--	
    // 判断当前队列大小是否过小	
    // 为了保证不浪费空间,在队列空间等于总长度四分之一时	
    // 且不为 2 时缩小总长度为当前的一半	
    if (this.size === this.getLength() / 4 && this.getLength() / 2 !== 0) {	
      this.resize(this.getLength() / 2)	
    }	
    return r	
  }	
  getHeader() {	
    if (this.isEmpty()) {	
      throw Error('Queue is empty')	
    }	
    return this.queue[this.first]	
  }	
  getLength() {	
    return this.queue.length - 1	
  }	
  isEmpty() {	
    return this.first === this.last	
  }	
  resize(length) {	
    let q = new Array(length)	
    for (let i = 0; i < length; i++) {	
      q[i] = this.queue[(i + this.first) % this.queue.length]	
    }	
    this.queue = q	
    this.first = 0	
    this.last = this.size	
  }	
}

【故障诊断】【pytorch】基于CNN-LSTM故障分类的轴承故障诊断研究[西储大学数据](Python代码实现)内容概要:本文介绍了基于CNN-LSTM神经网络模型的轴承故障分类方法,利用PyTorch框架实现,采用西储大学(Case Western Reserve University)公开的轴承故障数据集进行实验验证。该方法结合卷积神经网络(CNN)强大的特征提取能力和长短期记忆网络(LSTM)对时序数据的建模优势,实现对轴承不同故障类型和严重程度的高精度分类。文中详细阐述了数据预处理、模型构建、训练流程及结果分析过程,并提供了完整的Python代码实现,属于典型的工业设备故障诊断领域深度学习应用研究。; 适合人群:具备Python编程基础和深度学习基础知识的高校学生、科研人员及工业界从事设备状态监测故障诊断的工程师,尤其适合正在开展相关课题研究或希望复现EI级别论文成果的研究者。; 使用场景及目标:① 学习如何使用PyTorch搭建CNN-LSTM混合模型进行时间序列分类;② 掌握轴承振动信号的预处理特征学习方法;③ 复现并改进基于公开数据集的故障诊断模型,用于学术论文撰写或实际工业场景验证; 阅读建议:建议读者结合提供的代码逐行理解模型实现细节,重点关注数据加载、滑动窗口处理、网络结构设计及训练策略部分,鼓励在原有基础上尝试不同的网络结构或优化算法以提升分类性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值