Javascript中的队列

队列遵循FIFO (First In First Out)原则。

普通队列

      function Queue() {
        var items=[];
        //向队列尾部添加一个或者多个元素
        this.enqueue=function(element) {
          items.push(element);
        }
        // 移除队列最后一个
        this.dequeue=function () {
          return items.shift();
        }
        // 返回队列第一个
        this.front=function () {
          return items[0];
        }
        // 队列是否为空
        this.isEmpty=function(){
          return items.length==0;
        }
        // 返回队列长度
        this.size=function () {
          return items.length;
        }
        // 打印
        this.print=function(){
          console.log(items.toString());
        }
      }

  优先级队列

function PriorityQueue() {
        var items=[];
        function QueueElement(element,priority) {
          this.element=element;
          this.priority=priority;
        }
        // priority 数值越大,优先级越低
        this.enqueue=function (element,priority) {
          var queueElement=new QueueElement(element,priority);
          if(this.isEmpty()){
            items.push(queueElement);
          }else{
            var added=false;
            for (var i = 0; i < items.length; i++) {
              if(queueElement.priority<items[i].priority){
                items.splice(i,0,queueElement);
                added=true;
                break;
              }
            }
            if(!added){
              items.push(queueElement);
            }
          }
        }
        // 移除队列最后一个
        this.dequeue=function () {
          return items.shift();
        }
        // 返回队列第一个
        this.front=function () {
          return items[0];
        }
        // 队列是否为空
        this.isEmpty=function(){
          return items.length==0;
        }
        // 返回队列长度
        this.size=function () {
          return items.length;
        }
        // 打印
        this.print=function(){
          console.log(JSON.stringify(items));
        }
}

通过击鼓传花演示循环队列

function hotPotato(nameList,num){
        var queue=new Queue(),eliminated="";
        for (var i = 0; i < nameList.length; i++) {
          queue.enqueue(nameList[i]);
        }
        while (queue.size()>1) {
          for (var i = 0; i < num; i++) {
            queue.enqueue(queue.dequeue());
          }
          eliminated=queue.dequeue();
          console.log(eliminated+"被淘汰");
        }
        return queue.dequeue();
 }

  

  

时间: 2024-10-13 02:05:24

Javascript中的队列的相关文章

javascript中的队列结构

1.概念 队列和栈结构不同,栈是一种后进先出的结构,而队列是一种先进先出的结构.队列也是一种表结构,不同的是队列只能在队尾插入元素,在队首删除元素,可以将队列想象成一个在超时等待排队付钱的队伍,或者在银行拿的号子,排在前面的人拥有优先服务权.队列是一种FIFO(First In First Out).队列用在很多地方,比如提交操作系统执行一系列的进程,打印任务池等,一些仿真系统使用队列来模拟银行或者超时里排队的顾客. 队列主要有两种操作,祥队列中插入新元素和删除队列中的元素.插入操作也叫入队,删

javascript中的栈、队列。

                       javascript中的栈.队列 栈方法     栈是一种LIFO(后进先出)的数据结构,在js中实现只需用到2个函数 push()  接受参数并将其放置数组尾,并返回修改后的数组长度. pop()  移除数组尾的最后一项,并返回移除项的值. 事例: var colors = new Array();var count = colors.push("red","green"); count = colors.push(&

理解与使用Javascript中的回调函数 -2

在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply()函数的,或者有一些简短的关于callback的使用示例. 函数也是对象 想弄明白回调函数,首先的清楚地明白函数的规则.在javascript中,函数是比较奇怪的,但它确确实实是对象.确切地说,函数是用 Function()构造函数创建的Function对象.Function对象包含一个字符串,字符串

理解javascript中的Array类型

引子: 从事前端开发有段时间了,个人观点:想在前端开发这条路上走的更远,不仅要学好HTML&HTML5.CSS&CSS3,最重要的就是要学好javascript了.所以打好javascript基础是非常有必要,今天就平时所用的javascript中的数组Array类型做个整理.本人前端初学者,如果以下内容对您有帮助的话本人也非常欣慰,如果写的不好,请提出您的见解,共享下您在学习js中的宝贵经验,谢谢! Array类型是js中非常常用的数据类型了,这里就不脑补了,至于什么是数组类型,请绕道w

javascript中数组常用的方法

在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法.数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'. 运行[] instanceof Array他会返回ture.虽然结果是这样,但也有复杂的类数组对象,如字符串或arguments对象,但arguments对象并非是Array的实例,但他却拥有length属性,而且他的值是可以被索引的,因此他可以像一个数组那样被遍历. 这本文中,我将介绍数组原型的一

Javascript中常见的10大面试题及答案

在IT界中,JavaScript开发人员的需求量一直居高不下.如果你的能力能够胜任这一角色,那么你有很多机会换一家公司,并提高薪水.但在你被一家公司聘用之前,你必须展示你的技能,以通过面试环节.在本文中,我将向您展示10个 JavaScript 技能典型问题以及其相关解决方案,来面试前端工程师.它们很有意思! 问题1: 作用域(Scope) 考虑以下代码: (function() { var a = b = 5; })(); console.log(b); 控制台(console)会打印出什么?

JavaScript 中变量、作用域和内存问题的学习

这是我学习JavaScript的第二篇文章,之前做过几年的Java开发,发现JavaScript虽然也是面向对象的语言但是确实有很多不同之处.就本篇博客,主要学习总结一下最近学习到的JavaScript的知识,其中有些是网络上的,不过对于理解JavaScript,和在工作总是会很实用的,所以总结了下来: 那么就开始吧,首先是变量 在JavaScript中变量分为两种:一种是基本类型,基本类型值在内存中占用固定大小的空间,因此被保存在栈内存中.从一个变量向另一个变量复制基本类型的值,会创建这个值的

JavaScript中的数组详解

JavaScript中的数组 一.数组的定义 数组是值的有序集合,或者说数组都是数据的有序列表. 二.创建数组 [字面量形式] 1.空数组 var arr=[]; 2.带有元素的数组 var arr=[1,2,3,1,2]; 3.数组值可以是任意类型 var arr=[1,2.3,'foodoir',true,null,undefined,[1,2,3],{name:'foodoir',age:21}]; 注意: 1.数组字面量中的值不一定是常量,它们可以是任意表达式: 2.它可以包含对象字面量

Javascript中的异步

在C#,Java中,异步方法,通常是伴随多线程,并发等术语一起出现的,比如C#中的async方法,是运行在一个线程池线程上,并且在异步方法运行完成后,有一个回调函数通知主线程. 那么由于Javascript是单线程的,它的异步又是怎么解释的? 首先对异步方法给一个定义,什么样的方法算是异步方法.我认为异步方法最主要有2点,一个是不阻塞当前代码的执行,另一个是有回调方法.即异步方法运行完可以通知主线程. 事实上,当说起Javascript的异步时,不要忽略了,Javascript中其实有2种异步,