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'. ...
随机推荐
- 多节点ssh免密匙登录
1,在所有节点上,使用yourname用户名执行: ssh-keygen -t dsa -P '' -f /home/yourname/.ssh/id_dsa 2,在node1的/home/yourn ...
- Hihocoder 1079 离散化
离散化这里有很多种方式 利用结构体记录最初的索引在按位置排序再记录排名即为离散的位置再按索引排回来 或者用数组记录排序后直接对原位置二分直接去找离散应在的位置 或者对数组排序后直接map 3 20 1 ...
- Uml学习-类图简介
类图(Class Diagram)简介 类图是面向对象分析(OOA,Object-Oriented Analysis)和面向对象设计(OOP,Object-Oriented Deisgn)思想的重要 ...
- IP釋放、清除、以及刷新DNS
Windows 10 於桌面按住 Windows + X 按鍵. 選擇 Command Prompt (以管理員執行). 在彈跳視窗中輸入 ipconfig /release. 等待數秒回報此 IP ...
- WBS功能分解
WBS功能分解表格如下: 功能 子功能 二级子功能 预计花费时间 (小时) 实际花费时间(小时) 地图显示跑道 制作地图 获得开发权限key 1 2 将sdk导入程序 0.5 1 调试程序 1 2 ...
- 如何写一个HttpClient[1]——URI的处理
如何写一个HttpClient[1]--URI的处理 在翻阅apache的http client的代码的时候,看到org.apache.http.client.utils.URIBuilder.jav ...
- CF 484E - Sign on Fence
E. Sign on Fence time limit per test 4 seconds memory limit per test 256 megabytes input standard in ...
- Attribute和自定义Property
property(属性) attribute(特性) property和attribute的同步 id href value class/className 旧IE的趣事 attribute作为DOM ...
- VIM配置与管理
VIM是写代码的神器,个人觉得比sublime更强,详情http://zh.wikipedia.org/wiki/Vim.如果用网游做类比,没有经过打造的VIM,也只能算是一只非常有潜力的0级宠物,经 ...
- JBOSS服务器的安装及配置
1 安装jdk(jdk-1_5_0_05-windows-i586-p.exe)2 配置jdk环境 安装完成后还需要配置运行时环境:右键点击"我的电脑"->"属性& ...