javascript数据结构-优先队列
这里之所以扩充一个 有限队列 是因为,生活使用中队列通常会附加优先级,比如排队买票,一般老人和军人等会有优先权限。
实现:继承上篇的 普通队列实现。这里用一种方法,入队的时候,进行排序插入到指定位置,输出不变。
优先队列类
//继承自 Queue
function PriorityQueue(){
Queue.call(this);
}
继承原型方法
function base(p, c){
var h = {}, P = p.prototype, C = c.prototype;
for(var k in C){
h[k] = 1;
}
for(var k in P){
if(!h[k]){
C[k] = P[k];
}
}
}
base(Queue, PriorityQueue);
添加数据
// 增加一个节点类
function Node(element, priority){
this.element = element;
this.priority = priority;
}
// 更新添加
PriorityQueue.prototype.enqueue = function (element, priority){
var node = new Node(element, priority);
if(this.isEmpty()){
this.data.push(node);
}else{
var add = false;
for(var i = 0,len=this.data.length; i<len; i++){
if(node.priority < this.data[i].priority){
this.data.splice(i, 0, node);
add = true;
break;
}
}
if(!add){
this.data.push(node);
}
}
}
完整代码
function PriorityQueue(){
Queue.call(this);
}
function base(p, c){
var h = {}, P = p.prototype, C = c.prototype;
for(var k in C){
h[k] = 1;
}
for(var k in P){
if(!h[k]){
C[k] = P[k];
}
}
}
base(Queue, PriorityQueue);
function Node(element, priority){
this.element = element;
this.priority = priority;
}
PriorityQueue.prototype.enqueue = function (element, priority){
var node = new Node(element, priority);
if(this.isEmpty()){
this.data.push(node);
}else{
var add = false;
for(var i = 0,len=this.data.length; i<len; i++){
if(node.priority < this.data[i].priority){
this.data.splice(i, 0, node);
add = true;
break;
}
}
if(!add){
this.data.push(node);
}
}
}
PriorityQueue.prototype.print = function (){
console.dir(this.data)
}
下面研究链表
javascript数据结构-优先队列的更多相关文章
- 为什么我要放弃javaScript数据结构与算法(第四章)—— 队列
有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第四章 队列 队列数据结构 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序 ...
- 学习JavaScript数据结构与算法 (二)
学习JavaScript数据结构与算法 的笔记 包含第四章队列, 第五章链表 本人所有文章首发在博客园: http://www.cnblogs.com/zhangrunhao/ 04队列 实现基本队列 ...
- JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)
前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...
- 【JavaScript数据结构系列】03-队列Queue
[JavaScript数据结构系列]03-队列Queue 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识队列Queue结构 队列,跟我们的日常生活非常贴近,我们前面举例了食堂排队打 ...
- 【JavaScript数据结构系列】04-优先队列PriorityQueue
[JavaScript数据结构系列]04-优先队列PriorityQueue 码路工人 CoderMonkey 转载请注明作者与出处 ## 1. 认识优先级队列 经典的案例场景: 登机时经济舱的普通队 ...
- 【JavaScript数据结构系列】00-开篇
[JavaScript数据结构系列]00-开篇 码路工人 CoderMonkey 转载请注明作者与出处 ## 0. 开篇[JavaScript数据结构与算法] 大的计划,写以下两部分: 1[JavaS ...
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- 学习javascript数据结构(一)——栈和队列
前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...
随机推荐
- Android与Struts2简单json通信
具体要求是: 服务器端得到客户端传递来的数据,并返回给客户端一条json格式的字符串 闲话不多说,直接上代码 首先是服务器端代码:建立一个web工程,导入struts2和json的jar包,并在web ...
- java 多线程之wait(),notify,notifyAll(),yield()
wait(),notify(),notifyAll()不属于Thread类,而是属于Object基础类,也就是说每个对像都有wait(),notify(),notifyAll()的功能.因为都个对像都 ...
- win2008无密码共享
http://jingyan.baidu.com/album/76a7e409dc4b5cfc3a6e1566.html?picindex=15
- 17-前端开发之jQuery
什么是 jQuery ? jQuery 是一个 JavaScript 库,它极大地简化了 JavaScript 编程. jQuery是一个兼容多浏览器的javascript库,核心理念是write l ...
- Membership 重置密码
public ActionResult ChongZhiMiMa() { Membership.GetUser("admin").UnlockU ...
- 查看struct或class的内存布局
适用于VC编译器(Visual Studio) 附加选项: /d1 reportSingleClassLayout[foo] 例如CItem(注意后面没有空格) /d1 reportSingleCla ...
- ruby不能识别中文的一个坑
需要安装readline,并重装ruby,挂readline编译. 后续发现总出错,然后发现brew包依赖不全,按照提示,一个一个的安装依赖.安装后使用rvm重装ruby就ok了. 多亏能够有办法上g ...
- 初次尝试用Kotlin实现Android项目
Kotlin: The Swift of Android 起这个文内标题的原因很简单,就是对Kotlin抱有希望--能使Android的开发更简洁.高效及安全.知道Kotlin是从简书的一篇短文,越来 ...
- SOA总结(图片打开略慢请知晓)
- time & datetime
时间相关的操作,时间有三种表示方式: 时间戳 1970年1月1日之后的秒,即:time.time() 格式化的字符串 2014-11-11 11:11, 即:t ...