(js描述的)数据结构[队列结构](3)

一.队列结构的特点:

1.基于数组来实现,的一种受限的线性结构。

2.只允许在表头进行删除操作,在表尾进行插入操作。

3.先进先出(FIFO)

二.队列的一些应用:

1.按一定顺序打印文档,执行输出后的结果。

2.多线程的实际执行顺序,就如队列结构相似。

三.队列的封装:

  1. function Queue() {
  2. this.items = []
  3. //向队尾添加一个元素
  4. Queue.prototype.enqueue = function (element) {
  5. this.items.push(element)
  6. }
  7. //从队头删除一个元素
  8. Queue.prototype.dequeue = function () {
  9. this.items.shift()
  10. }
  11. //返回队列中第一个元素
  12. Queue.prototype.front = function() {
  13. return this.items[0]
  14. }
  15. //检查队列是否为空
  16. Queue.prototype.isEmpty = function () {
  17. return this.items.length == 0
  18. }
  19. //返回队列的长度
  20. Queue.prototype.size = function () {
  21. return this.items.length
  22. }
  23. //返回队列的字符串形式
  24. Queue.prototype.toString = function () {
  25. var str = ''
  26. for (var i=0; i< this.items.length; i++) {
  27. str += this.items[i] + ' '
  28. }
  29. return str
  30. }
  31. }

四.队列应用的一些实例:

一.击鼓传花:

1.规则: 几个人按一定顺序轮流数数,数到给定数字者淘汰,

最后留下的一人为胜利者。需要得到最后的人名字及在原来数组中的索引序号?

  1. function passGame(nameList, num) {
  2. var queue = new Queue()
  3. for (var i = 0; i< nameList.length ; i++) {
  4. queue.enqueue(nameList[i])
  5. }
  6. while (queue.size() > 1) {
  7. for (var i = 0; i< num - 1; i++) {
  8. queue.enqueue(queue.dequeue())
  9. }
  10. queue.dequeue()
  11. }
  12. var endName = queue.dequeue()
  13. var index = nameList.indexOf(endName)
  14. return {index: endName}
  15. }

五.优先级队列

1.插入的位置根据优先级而定,所以传入的数据必须携带哦优先级,其他操作与普通队列一样。(使用了内部类来增加带有优先级数据的封装性)。

  1. function PriorityQueue() {
  2. function PriorityElement(element, priority) {
  3. this.element = element;
  4. this.priority = priority;
  5. }
  6. this.items = [];
  7. PriorityQueue.prototype.enqueue = function(element, priority) {
  8. var priorityElement = new PriorityElement(element, priority);
  9. if (this.items.length === 0) {
  10. this.items.push(priorityElement);
  11. } else {
  12. var flag = false;
  13. for (var i = 0; i < this.items.length; i++) {
  14. if (priorityElement.priority <= this.items[i].priority) {
  15. this.items.splice(i, 0, priorityElement);
  16. flag = true;
  17. }
  18. }
  19. if (!flag) {
  20. this.items.push(priorityElement);
  21. }
  22. }
  23. }

(js描述的)数据结构[队列结构,优先级队列](3)的更多相关文章

  1. (js描述的)数据结构[集合结构](6)

    (js描述的)数据结构[集合结构](6) 一.集合结构特点 1.集合中的元素不能重复. 2.集合是无序的. 二.集合的代码实现 function Set() { this.items = {} //1 ...

  2. (js描述的)数据结构[栈结构](2)

    (js描述的)数据结构[栈结构](2) 一.什么是栈结构 1.一种受限制的线性结构,这种结构可以基于数组来实现. 2.可以抽象成一个容器,上面的是栈顶,底下的是栈底.所以仅允许对栈顶进行操作, 二.栈 ...

  3. java数据结构----队列,优先级队列

    1.队列:和栈中的情况不同,队列中的数据项不总是从数组下标0开始,移除一个数据项后,队头指针会指向下标较高的数据项,其特点:先入先出 2.图解 3.队列的实现代码: 3.1.Queue.java pa ...

  4. java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表

    java实现 数据结构:链表. 栈. 队列.优先级队列.哈希表   数据结构javavector工作importlist 最近在准备找工作的事情,就复习了一下java.翻了一下书和网上的教材,发现虽然 ...

  5. (js描述的)数据结构[哈希表1.1](8)

    (js描述的)数据结构[哈希表1.1](8) 一.数组的缺点 1.数组进行插入操作时,效率比较低. 2.数组基于索引去查找的操作效率非常高,基于内容去查找效率很低. 3.数组进行删除操作,效率也不高. ...

  6. (js描述的)数据结构[双向链表](5)

    (js描述的)数据结构[双向链表](5) 一.单向链表的缺点 1.只能按顺序查找,即从上一个到下一个,不能反过来. 二.双向链表的优点 1.可以双向查找 三.双向链表的缺点 1.结构较单向链表复杂. ...

  7. (js描述的)数据结构[链表](4)

    (js描述的)数据结构 [链表](4) 一.基本结构 二.想比于数组,链表的一些优点 1.内存空间不是必须连续的,可以充分利用计算机的内存,事项灵活的内存动态管理. 2.链表不必再创建时就确定大小,并 ...

  8. (js描述的)数据结构[字典](7)

    (js描述的)数据结构[字典](7) 一.字典的特点 1.字典的主要特点是一一对应关系. 2.使用字典,剋通过key取出对应的value值. 3.字典中的key是不允许重复的,而value值是可以重复 ...

  9. 用JS描述的数据结构及算法表示——栈和队列(基础版)

    前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...

随机推荐

  1. py123第一次作业

      绘制五角星<br>import turtle turtle.setup(600,350,200,200) turtle.pensize(2) turtle.pencolor(" ...

  2. .NET Core学习笔记(5)——WebAPI从Server端push消息到Client

    标题起得有点厉害,汉字夹杂着E文,不符合教育部公布的“向社会推荐使用的外语词中文译名”规范.不过他管不着我.写本篇的起因,是重构一个现有的WinForms程序,将Server端的部分逻辑从raw so ...

  3. 交换机三种模式Access、Hybrid和Trunk

    [端口介绍] 种链路类型:access.trunk.hybird 个VLAN,一般用于连接计算机端口: Trunk类型端口:可以允许多个VLAN通过,可以接收和发送多个VLAN 报文, 一般用于交换机 ...

  4. Journal of Proteome Research | Lipidomics reveals similar changes in serum phospholipid signatures of overweight and obese paediatric subjects (分享人:赵倩倩)

    文献名:Lipidomics reveals similar changes in serum phospholipid signatures of overweight and obese paed ...

  5. Android 缓存的使用

    缓存基础类 import android.content.Context; import android.content.SharedPreferences; public class CachePa ...

  6. 强智教务系统验证码识别 Tensorflow CNN

    强智教务系统验证码识别 Tensorflow CNN 一直都是使用API取得数据,但是API提供的数据较少,且为了防止API关闭,先把验证码问题解决 使用Tensorflow训练模型,强智教务系统的验 ...

  7. 【面试QA-基本模型】LSTM

    目录 为什么传统 CNN 适用于 CV 任务,RNN 适用于 NLP 任务 RNN 原理 LSTM 原理 GRU 原理 RNN BPTT LSTM 如何解决 RNN 的梯度消失问题 怎样增加 LSTM ...

  8. Mysql常用sql语句(一)- 操作数据库

    21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html ...

  9. [模板] trie树 (字典树)

    本文基于https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html #include<bits/stdc++.h> using name ...

  10. Javascript之网页版待办事项

    本文使用原生JS实现站点 http://www.todolist.cn/ 的基本功能. 其中页面的HTML布局和CSS样式取用原站,JS部分为自己编写. 效果图 完整代码 HTML.JS部分 < ...