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();
}
Javascript中的队列的更多相关文章
- javascript中的队列结构
1.概念 队列和栈结构不同,栈是一种后进先出的结构,而队列是一种先进先出的结构.队列也是一种表结构,不同的是队列只能在队尾插入元素,在队首删除元素,可以将队列想象成一个在超时等待排队付钱的队伍,或者在 ...
- JavaScript中的算法之美——栈、队列、表
序 最近花了比较多的时间来学习前端的知识,在这个期间也看到了很多的优秀的文章,其中Aaron可能在这个算法方面算是我的启蒙,在此衷心感谢Aaron的付出和奉献,同时自己也会坚定的走前人这种无私奉献的分 ...
- javascript中的栈、队列。
javascript中的栈.队列 栈方法 栈是一种LIFO(后进先出)的数据结构,在js中实现只需用到2个函数 push() 接受参数并将其放置 ...
- JavaScript中async和await的使用以及队列问题
宏任务和微任务的队列入门知识,可以参考之前的文章: JavaScript的事件循环机制 宏任务和微任务在前端面试中,被经常提及到,包括口头和笔试题 async && await概念 a ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- JavaScript中数组操作常用方法
JavaScript中数组操作常用方法 1.检测数组 1)检测对象是否为数组,使用instanceof 操作符 if(value instanceof Array) { //对数组执行某些操作 } 2 ...
- 浅谈JavaScript中的定时器
引言 使用setTimeout()和setInterval()创建的定时器可以实现很多有意思的功能.很多人认为定时器是一个单独的线程(之前我也是),但是JavaScript是运行在单线程环境中的,而定 ...
- javascript中数组常用的方法
在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法.数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'. ...
随机推荐
- GPS部标平台的架构设计(一)
设计和开发一个GPS系统似乎并不太难,很多人马上就想到了地图,放大,缩小之类的功能,最多就是在加点报表之类的东西,就成了. 这种观点造成了业界内,很多GPS系统粗制滥造,不堪大用. 事实上,设计和开发 ...
- c 头文件<ctype.h>(一)
头文件<ctype.h>中声明了一些测试字符的函数. 每个函数的参数均为int类型,参数的值必须是EOF或可用unsigned char类型表示的字符,函数返回值为int类型. 如果参数c ...
- 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理
验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...
- javascript原型对象
先来做个复习,ES5中有有几种数据类型呢? 5种基本数据类型 Undefined Null Boolean Number String 1种复杂数据类型 Object 除了基本数据类型,万物皆对象,记 ...
- android 编译过程
引用:http://www.cnblogs.com/devinzhang/archive/2011/12/20/2294686.html http://blog.sina.com.cn/s/blog_ ...
- ssh免密码认证
举例:有机器PC_A(172.0.246),PC_B(172.0.1.140).现想A通过ssh免密码登录到B. 1.在PC_A主机下生成公钥/私钥对 [comodo@PC_A ~]$ ssh-key ...
- Extjs 一些配置以及方法
1.例如想要实现以下功能,本来model中只有用户的firstname和lastname,但是在grid中展示还需要展示用户姓名,或者只展示用户姓名
- just555 对话
网易 新闻 2005-03-31 16:37:47 空!(19194697)555,你在大连炒单,单日最大盈利率多少? 2005-03-31 16:37:59 just555(79610908)最大1 ...
- dll 日志文件 放在同一个目录。
string strPath = "log.txt"; 如果日志问价跟dll文件放在一起,直接这么些就可以了.
- html5与html4的区别,如何一眼区分
还是在面试过程中遇到的这个问题,但是当时感觉回答的不是很全面,回来以后自己做的总结: 以上这个问题如果教大家看源码,可能一眼很直观的就能认出,那个是html4,那个是html5,但是面试的时候问道这个 ...