文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaScript中怎么实现一个队列数据结构

2024-04-02 19:55

关注

这篇文章将为大家详细讲解有关JavaScript中怎么实现一个队列数据结构,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1.队列数据结构

如果你喜欢旅行(像我一样),很可能你在机场通过了办理登机手续。如果有很多旅客愿意办理登机手续,自然就会在值机柜台前排起长龙。

JavaScript中怎么实现一个队列数据结构

刚进入机场并想要办理登机手续的旅客将排队进入队列,而刚刚在服务台办理了登机手续的旅客则可以离开队列。

这是队列的真实示例—队列数据结构以相同的方式工作。

队列是一种“先入先出”(FIFO)数据结构的类型。入队(输入)的第一项是要出队(输出)的第一项。

从结构上说,一个队列有2个指针。队列中最早的排队项目位于队列的顶部,而最新队列的项目位于队列的末尾。

2.队列中的操作

队列主要支持两种操作:入队列(enqueue)和出队列(dequeue)。此外,您可能会发现使用peek和length操作非常有用。

2.1 入队操作

入队操作在队列尾部插入一个项目。

JavaScript中怎么实现一个队列数据结构

上图中的入队操作将项目 8 插入尾部,8 成为队列的尾部。

queue.enqueue(8);

2.2 出队操作

出队操作提取队列头部的项,队列中的下一项成为头。

JavaScript中怎么实现一个队列数据结构

在上面的图片中,出队操作从队列中返回并删除项目 7,在退出队列后,项目 2 成为新的头。

queue.dequeue(); // => 7

2.3 Peek操作

Peek操作读取队列的开头,而不会更改队列。

JavaScript中怎么实现一个队列数据结构

项目 7 是上图中队列的头部,Peek操作只是返回队列的头部——第 7 项,而不修改队列。

queue.peek(); // => 7

2.4 队列长度

长度操作计算队列包含多少个项目。

JavaScript中怎么实现一个队列数据结构

图片中的队列有4个项目:4、6、2 和 7。因此,队列长度为 4。

queue.length; // => 4

2.5 队列操作时间复杂度

关于所有的队列操作--enqueue、dequeue、peek和length——重要的是,所有这些操作必须在恒定的时间内 O(1) 执行。

恒定的时间 O(1) 意味着无论队列的大小(它可以有10个或100万个项目):enqueue、dequeue、peek和length操作必须在相对相同的时间内执行。

3.在JavaScript中实现队列

让我们看一下队列数据结构的可能实现,同时维持所有操作必须在恒定时间 O(1) 中执行的要求。

class Queue {   constructor() {     this.items = {};     this.headIndex = 0;     this.tailIndex = 0;   }    enqueue(item) {     this.items[this.tailIndex] = item;     this.tailIndex++;   }    dequeue() {     const item = this.items[this.headIndex];     delete this.items[this.headIndex];     this.headIndex++;     return item;   }    peek() {     return this.items[this.headIndex];   }    get length() {     return this.tailIndex - this.headIndex;   } }  const queue = new Queue();  queue.enqueue(7); queue.enqueue(2); queue.enqueue(6); queue.enqueue(4);  queue.dequeue(); // => 7  queue.peek();    // => 2  queue.length;    // => 3

Try the demo.

const queue = new Queue() 是创建队列实例的方式。

调用 queue.enqueue(7) 方法会将项目7排队到队列中。

queue.dequeue() 从队列中去队列一个头部的项目,而 queue.peek() 只是Peek头部的项目。

最后,queue.length 显示队列中还有多少项目。

队列方法的复杂性

Queue类的 queue()、dequeue()、peek() 和 length() 方法仅使用:

属性访问器(例如 this.items[this.headIndex] ),

或执行算术操作(例如 this.headIndex++ )

因此,这些方法的时间复杂度是恒定时间 O(1)。

关于JavaScript中怎么实现一个队列数据结构就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯