博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript实现优先队列
阅读量:5906 次
发布时间:2019-06-19

本文共 2085 字,大约阅读时间需要 6 分钟。

1.概念

    一般情况下从队列中删除元素,都是率先入队的元素。但是有些使用队列的情况不遵循先进先出的原则,这就是插队,这需要使用优选队列的数据结构来进行描述。

    从优先队列中删除元素的时候,需要考虑优先级的限制。比如医院急诊科的例子就是一个典型的优先队列的例子。当病人进入急诊室的时候,护士先根据病情给一个优先级代码,高优先级的患者先于低优先级的患者就医,优先级相同的根据先来先服务的顺序就医。

    定义存储队列元素的对象,然后构建优先队列数据结构。    

function Patient(name, code) {    this.name = name;    this.code = code;}

    变量code是一个整数,标识患者优先级或者病情验证程度,规定优先级代码越小优先级越高。新的dequeue() 方法遍历队列的底层存储数组,从中找出优先码最低的元素,然后使用数组的splice() 方法删除优先级最高的元素。新的dequeue() 方法定义如下所示:

function dequeue(){    var priority = this.dataStore[0].code;    var fromIndex = 0;    for (var i=1; i

    dequeue() 方法使用简单的顺序查找方法寻找优先级最高的元素(优先码越小优先级越高,比如,1 比5 的优先级高)。该方法返回包含一个元素的数组——从队列中删除的元素。

 

2.代码实现

    完整的代码如下所示: 

/*--------------Queue类的定义和测试代码----------------*/function Queue(){        this.dataStore = [];        this.enqueue = enqueue;        this.dequeue = dequeue;        this.front = front;        this.back = back;        this.toString = toString;        this.empty = empty;}//入队,就是在数组的末尾添加一个元素function enqueue(element){    this.dataStore.push(element);}//出队,判断优先级删除,注意这里用的是数组的splice方法,不是slice方法function dequeue(){    var priority = this.dataStore[0].code;    var fromIndex = 0;    for (var i=1; i
" } return retStr;}//判断数组是否为空function empty(){ if(this.dataStore.length == 0){ return true; }else{ return false; } }//返回数组中元素的个数function count(){ return this.dataStore.length;}/*----------------基数排序-----------------*/function Patient(name, code){ this.name = name; this.code = code;}var p = new Patient('smith', 5);var ed = new Queue();ed.enqueue(p);p = new Patient('jones', 4);ed.enqueue(p);p = new Patient('fehrendbach', 6);ed.enqueue(p);p = new Patient('brown', 1);ed.enqueue(p);p = new Patient('ingram', 1);ed.enqueue(p);document.write(ed.toString());var seen = ed.dequeue();document.write('
');document.write("服务病人:" + seen[0].name);document.write('
');document.write(ed.toString());seen = ed.dequeue();document.write('
');document.write("服务病人:" + seen[0].name);document.write('
');document.write(ed.toString());seen = ed.dequeue();document.write('
');document.write("服务病人:" + seen[0].name);document.write('
');document.write(ed.toString());

输出结果为:

 

转载地址:http://jucpx.baihongyu.com/

你可能感兴趣的文章
三目运算判断jsp脚本里面的值
查看>>
sshtunnel在本地访问云服务器mysql
查看>>
小蚂蚁学习APP接口开发(1)—— json方式封装通信接口
查看>>
我的友情链接
查看>>
CDN相关
查看>>
Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
查看>>
我的友情链接
查看>>
ftp协议基础
查看>>
访问共享经常中断
查看>>
人生的交易
查看>>
MySql
查看>>
sql server 下载安装标记
查看>>
js运算符(运算符的结合性)
查看>>
idea 编译级别的设置
查看>>
内置对象Array的原型对象中添加方法
查看>>
6大设计原则
查看>>
Github简介
查看>>
CISCO2691的OSPF点对点密文测评测试
查看>>
POJ 1661 Help Jimmy(递推DP)
查看>>
Node.js 中文学习资料和教程导航
查看>>