JavaScript 优先队列
优先队列,实现方法有两种:设置优先级,然后再正确的位置添加元素;入列操作添加元素,然后按照优先级移除。 此处使用第一种方法。对数组或队列不熟悉的同学请移步。
function priorityQueue() {
var items = []; //队列承载
function QueueElement(element, priority) { //创建特殊元素,包含要添加到队列的元素及其在队列的优先级
this.element = element;
this.priority = priority;
}
//向队列尾部添加一个新的项
this.enqueue = function (element, priority) {
var queueElement = new QueueElement(element, priority);
//如果队列为空,则直接填入
if (this.isEmpty()) {
items.push(queueElement)
} else
//否则 去找一个比要添加元素的优先级更低(priority值更大)的元素,就把新元素插入到它之前。优先级相同,先进先出
{
var added = false;
for (var i = 0; i < items.length; i++) {
if (queueElement.priority < items[i].priority) {
items.splice(i, 0, queueElement); //splice 是数组方法
added = true;
break; //添加之后跳出循环
}
}
//如果要添加的priority的值大于任何以有元素,直接添加在末尾即可
if (!added) {
items.push(queueElement);
}
}
}
//删除队列头部第一个元素
this.dequeue = function () {
return items.shift();
}
//返回队列中第一个元素
this.front = function () {
return items[0];
}
//确定元素是否为空 为空则为true 不为空则为false
this.isEmpty = function () {
return items.length === 0;
}
//返回队列长度
this.size = function () {
return items.length;
}
//打印队列
this.print = function () {
console.log(items)
for (var i = 0; i < items.length; i++) {
console.log(items[i].element)
}
}
}
定义好优先队列之后,我们开始使用:
//赵钱孙李,周吴郑王。冯陈诸卫,蒋沈韩杨。
var pq = new priorityQueue();
pq.enqueue('周', 2);
pq.enqueue('吴', 2);
pq.enqueue('郑', 2);
pq.enqueue('王', 2);
pq.enqueue('赵', 1);
pq.enqueue('钱', 1);
pq.enqueue('孙', 1);
pq.enqueue('李', 1);
pq.enqueue('将', 4);
pq.enqueue('沈', 4);
pq.enqueue('韩', 4);
pq.enqueue('杨', 4);
pq.enqueue('冯', 3);
pq.enqueue('陈', 4);
pq.enqueue('诸', 4);
pq.enqueue('卫', 4);
pq.print();
pq.size();
打印结果如下:
这里的长度没有打印出来,但是放在print()方法中,就能打印出长度。在这里报了个错,哪位大神看到了能讲解一下哇
附上我的微信平台
不喜勿喷哈

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
JavaScript 队列(一)
队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。 队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。 在现实中,最常见的队列的例子就是排队。 function Queue(){//声明队列对象 var items = [];//队列的承载 //向队列尾部添加一个或多个新的项 this.enqueue = function(el){ items.push(el) } //删除队列头部第一个元素 this.dequeue = function(){ return items.shift(); } //返回队列中第一个元素 this.front = function(){ return items[0]; } //确定元素是否为空 为空则为true 不为空则为false this.isEmpty = function(){ return items.length === 0; } //返回队列长度 this.size = function(){ return items.length; } //打印队列 thi...
-
下一篇
Windchill的JSP页面跳转到Ext页面的分析
今天花了一天时间,看了一块代码,低效但是不得不看懂。具体内容是这样的:Windchill中按钮菜单栏嵌入了一个菜单项,点击它会触发弹出一个新的浏览器页面,相当于弹框,让你输入内容,然后点击保存按钮保存输入信息。问题就在于菜单项本身是一个JSP页面,点击以后弹出窗体本身会是一个Ext的页面。上图描述一下:上图这样的一个菜单项这样配置的一个菜单项点击菜单项,也就是这个url以后会跳转到这个url地址代表的jsp页面JSP的代码如下: <%@page import="com.bplead.drawingApproval.util.QsWebUtil"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //重新定向action地址 //QsWebUtil.forceNavigateNetmarketsURL(request, response); QsWebUtil.BbURL(request, response); //-----...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- MySQL数据库在高并发下的优化方案
- Red5直播服务器,属于Java语言的直播服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音