首页 > 其他分享 >队列和栈的简单实现

队列和栈的简单实现

时间:2023-04-20 18:59:29浏览次数:33  
标签:return 队列 items 元素 实现 length 数组 简单

简单实现2个数据结构,来帮助我们更好的处理数据

基本

  • 队列(Queue)是一种先进先出(FIFO)的数据结构,通常用于按照顺序处理任务或事件。在前端中,队列可以用于实现异步函数的调用、消息通知、动画播放等场景。队列还可以和数组结合使用,通过push()方法将元素添加到队列尾部,shift() 方法将元素从队列头部取出,实现队列的基本操作。

  • 栈(Stack)是一种后进先出(LIFO)的数据结构,通常用于存储临时数据,如函数调用、表达式求值和撤销操作等。在前端中,栈可以用于实现函数调用堆栈、路由历史记录等场景。栈也可以和数组结合使用,通过push()方法将元素添加到栈顶,pop()方法将元素从栈顶取出,实现栈的基本操作。

实现

队列

class Queue {
  constructor() {
    // 使用数组来保存队列元素
    this.items = [];
  }
  // 入队操作,将元素添加到队列末尾
  enqueue(item) {
    this.items.push(item);
  }
  // 出队操作,移除队列头部元素并返回
  dequeue() {
    return this.items.shift();
  }
  // 获取队列头部元素
  front() {
    return this.items[0];
  }
  // 判断队列是否为空
  isEmpty() {
    return this.items.length === 0;
  }
  // 获取队列长度
  size() {
    return this.items.length;
  }
}

利用构造函数创建了一个空数组作为队列的存储结构。入队操作使用 push() 方法将元素添加到数组末尾,出队操作使用 shift() 方法移除数组头部元素并返回。获取队列头部元素直接访问数组第一个元素即可,判断队列是否为空利用数组的 length 属性,获取队列长度同样可以使用数组的 length 属性。

class Stack {
  constructor() {
    // 使用数组来保存栈元素
    this.items = [];
  }

  // 入栈操作,将元素添加到栈顶
  push(item) {
    this.items.push(item);
  }

  // 出栈操作,移除栈顶元素并返回
  pop() {
    return this.items.pop();
  }

  // 获取栈顶元素
  peek() {
    return this.items[this.items.length - 1];
  }

  // 判断栈是否为空
  isEmpty() {
    return this.items.length === 0;
  }

  // 获取栈长度
  size() {
    return this.items.length;
  }
}

同样利用构造函数创建了一个空数组作为栈的存储结构。入栈操作使用 push() 方法将元素添加到数组末尾,出栈操作使用 pop() 方法移除数组末尾元素并返回。获取栈顶元素访问数组最后一个元素即可,判断栈是否为空利用数组的 length 属性,获取栈长度同样可以使用数组的 length 属性。

标签:return,队列,items,元素,实现,length,数组,简单
From: https://www.cnblogs.com/Acicap/p/17337937.html

相关文章

  • 双端队列数据结构
    双端队列是一种数据结构,也被称为deque或double-endedqueue。它类似于队列,但它允许从队列的两端添加或删除元素,而不仅仅是队列的一端。双端队列可以用数组或链表实现。如果使用数组实现,它可以使用循环数组的方式,使得在头尾进行插入和删除的操作可以在常数时间内完成。如果使用链......
  • css 利用 linear-gradient 实现条纹背景
    1.水平条纹背景当给背景设置渐变效果时,默认的渐变方向是垂直由上到下的,效果如下:{background:linear-gradient(#aaa,#ddd);}尝试拉近色标的距离,会发现渐变区域变小了:{background:linear-gradient(#aaa40%,#ddd60%);}当渐变色的色标设置为相同位置时,过渡区......
  • HTML实现文件上传下载功能实例解析
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有......
  • Vue3 日历组件的实现
    Vue3日历组件的实现以下是一个基于Vue3实现的简单日历组件的代码示例。这个日历组件包含了前一个月、当前月、下一个月的日期,并且可以支持选择日期、切换月份等功能。<template><divclass="calendar"><divclass="header"><buttonclass="prev"@click="pre......
  • 变换编码的设计与实现
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]一、实验目的采用dct变换,编制对图象进行变换的程序,图象采用8x8分快。对变换系数做Z型扫描,分别采用前2、3、5、8个和全部系数恢复原图象,观察结果,给出psnr值。对变换后系数做量化,量化表采用JPEG量化表,量化过程如下:,j)=C(i,j)/Q(i,j),其......
  • 如何快速实现table固定第一行
    固定列这个需求在项目中经常遇到,但是固定行这个需求还是大姑娘上轿——头一回。关于vxe-table这个插件就不过多介绍了,感兴趣的可以自行搜索。刚开始看到这个需求的时候,第一想法是插件文档上有没有类似于和固定列一样设置个fixed参数就能解决问题,翻开文档一看,果然,没有这个属性......
  • asp.net程序通过Microsoft Azure中SAML协议实现单点登录
    1.新建应用程序登录Azure门户,进入左侧菜单“企业应用程序--所有应用程序”,点“新建应用程序”,继续点“创建你自己的应用程序”,如下图选择和录入名称:填好应用的名称、想要如何处理应用程序必须选择第三个“继承未在库中找到的任何其他应用程序(非库)”,之后点“创建”按钮;2.单......
  • 盘点一个ddddocr实现登录的实战案例
    大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个Pyhton网络爬虫的问题,这里拿出来给大家分享下。二、实现过程一开始看上去并不能登录,找不到原因在哪,后来【甯同学】帮忙搞定了,代码如下:#-*-coding:utf-8-*-#@Author:KongYi#@Time:2022/12/313:49......
  • semaphore简单实例
    semaphore是java里边的信号灯,感觉很像blockqueue,嗯 packagecom.mutiple;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Semaphore;publicclassTestSemaphore{ publicstaticvoidmain(String[]......
  • 华为工单宝助力科视光学实现售 后服务自动化,提升客 户体验和企业效率 ​​
    随着科技的迅猛发展,全球制造业正处于一个数字化转型的关键时期。在这一趋势下,科视光学与华为工单宝携手开展战略合作,将华为工单宝的先进技术引入制造业售后服务,实现服务自动化和规范化。这一举措将极大地提升客体验,降低运营成本。此外,双方合作的成功经验也在为类似的中小微企业提......