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系统粗制滥造,不堪大用. 事实上,设计和开发 ...
- django的分页
一.分页器的函数封装 # 分页计算最小页和最大页 def page_list_return(total, current=1): ''' 分页,返回本次分页的最小页数和最大页数列表 :param to ...
- C#如何实现下载文件保存到本地上面去
public void btnTemplate_Click(object sender, EventArgs e) { string strResult = string.Empty; string ...
- Windows Phone 十七、Socket
Socket 常用类型 StreamSocket:Socket对象 StreamSocketListener:Socket监听对象,适用于服务端 服务端代码 <Grid x:Name=" ...
- Linux操作系统备份之二:通过tar拷贝分区实现Linux操作数据的在线备份
http://www.tektea.com/archives/2163.html. 在<Linux操作系统备份之一:使用LVM快照实现Linux操作系统数据的在线备份>文章中,我们介绍了使 ...
- (转)Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
详细解读Jquery各Ajax函数: $.get(),$.post(),$.ajax(),$.getJSON() 一,$.get(url,[data],[callback]) 说明:url为请求地址, ...
- swift基础:第三部分:对第一部分的补充说明
今天是我学习swift的第二天,虽然我和swift的距离有点远,但我相信,我会慢慢的接近这门语言的.好了,我们聊聊昨天晚上的事吧,昨天晚上下班早,回到家时,真是惊喜哈,宿舍那两做好了饭,等我吃饭,想对 ...
- html 关键字设定
<meta name="description" content="仡家油茶仡家油茶仡家油茶仡家油茶"> <meta name="k ...
- javascript的类型、值和变量
js的类型有多种分类,原始类型(数值,字符串,布尔值,null,undefined)和对象类型(object,String,Number,RgbExp等),或者是拥有方法的类型(object,Stri ...
- js通过隐藏iframe修改session值
js:function selects(id, ss) { window.frames["UpSession"].window.location.href = "../U ...