队列&优先队列
1、队列
普通的队列都是先进先出,元素从队尾添加,从队头删除。
function queue(){
var arr=[];
this.enqueue=function(item){
arr.push(item);
};
this.dequeue=function(){
arr.shift();
};
this.queueSize=function(){
return arr.length;
};
this.isEmpty=function(){
return arr.length==0;
};
this.front=function(){
return arr[0];
};
this.clear=function(){
arr=[];
};
this.print=function(){
console.log(arr.toString());
}
}
var q=new queue();
q.enqueue('1');
q.enqueue(2);
q.enqueue(3);
q.dequeue()
q.print();
2、优先级队列
优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出的特征。
任务编号 | 1 | 2 | 3 | 4 | 5 |
优先级编号 | 20 | 0 | 40 | 30 | 10 |
执行顺序 | 3 | 1 | 5 | 4 | 2 |
优先号越小,优先级越高。
优先队列主要有3个操作,查找,插入,删除。
分为两种最大优先队列和最小优先队列。
最大优先队列:先查找,找到优先级最大的元素将其删除。
最小优先队列:先查找,找到优先级最小的元素将其删除。
下面用JS写一个最大优先队列。入队列我们按照优先级从小到大排序,出队列仍然直接从队首出
function priorityQueue(){
var arr=[];
this.enqueue=function(item,pri){ // 入队列要比较优先级大小。同等优先级的情况下,按照普通队列处理
var flag=false;
var temp={
item:item,
pri:pri
}
for(var i=0,len=arr.length;i<len;i++){
if(arr[i].pri>temp.pri){
arr.splice(i,0,temp);
flag=true;
break;
}
}
if(flag==false){
arr.push(temp);
}
};
this.dequeue=function(){
arr.shift();
};
this.size=function(){
return arr.length;
};
this.isEmpty=function(){
return arr.length==0;
};
this.front=function(){
return arr[0];
};
this.clear=function(){
arr=[];
};
this.print=function(){
for(var i=0;i<arr.length;i++){
console.log(arr[i].item);
}
}
}
var q=new priorityQueue();
q.enqueue(1,30);
q.enqueue(2,20);
q.enqueue(3,90);
q.enqueue(4,0);
q.enqueue(5,50);
q.enqueue(7,30);
q.enqueue(8,0);
q.dequeue();
q.print();
队列&优先队列的更多相关文章
- luogu 2827 蚯蚓 单调队列/优先队列
易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bi ...
- Java栈,队列,优先队列的使用
1. 栈的使用: import java.util.*; public class Main{ public static void main(String[] args){ Deque<Str ...
- 【STL】栈+队列+优先队列(详)+ 拯救行动题解
一.栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元 ...
- Windows消息队列(优先队列,结构体中放比较函数)
Windows消息队列 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的 ...
- 【UVA】12100 Printer Queue(STL队列&优先队列)
题目 题目 分析 练习STL 代码 #include <bits/stdc++.h> using namespace std; int main() { int t; sc ...
- STL 优先队列
STL 栈,队列,优先队列用法 分类: Learning C++2013-11-15 00:52 843人阅读 评论(2) 收藏 举报 c++栈队列优先队列STL STL 中栈的使用方法(stack) ...
- 数据结构——队列(Queues)
队列的存储特性:FIFO(first in first out)即先进先出原则 单向/双向队列 *优先队列(与queue不同) 存储方式: 带尾指针的单向链表 / 数组 queue类: queue() ...
- JavaScript数据结构与算法(三) 优先级队列的实现
TypeScript方式实现源码 // Queue类和PriorityQueue类实现上的区别是,要向PriorityQueue添加元素,需要创建一个特殊的元素.这个元素包含了要添加到队列的元素(它可 ...
- 数据结构与算法——优先队列类的C++实现(二叉堆)
优先队列简单介绍: 操作系统表明上看着是支持多个应用程序同一时候执行.其实是每一个时刻仅仅能有一个进程执行,操作系统会调度不同的进程去执行. 每一个进程都仅仅能执行一个固定的时间,当超过了该时间.操作 ...
随机推荐
- 使用Cmder 安装 Composer 出现 "attempt to call a nil value"
原因: 不是这个原因,也不是那个原因,而是采用了中文路径, 把comder 整个搬到其他目录就行了
- js中this指向学习总结
在面向对象的语言中(例如Java,C#等),this 含义是明确且具体的,即指向当前对象.一般在编译期绑定. 然而js中this 是在运行期进行绑定的,这是js中this 关键字具备多重含义的本质 ...
- 编译libusb库
之前需要安装依赖库 : libudevautomakeautoconflibtool ./bootstrap.sh ./configure --with-pic --prefix=/home/libu ...
- [Vue CLI 3] Uglify 相关的应用和设计
在本文开始之前,先留一个问题? 如果在新版本我想加一个 drop_console 的配置呢? 在老版本的脚手架生成的配置中,对于线上环境的文件:webpack.prod.conf.js 使用了插件:u ...
- 为Apple Watch而战-----(初级篇)
重要 本文档是开发过程中使用的API或者技术的初步文档.苹果提供该文档以便于开发者使用苹果产品上使用技术和编程接口.后期该文档中信息会有所变动,所以依据本文档开发的软件应当使用最终的操作系统软件进行测 ...
- php表单和缩略图处理类是什么样呢
<?php//封装一个表单验证类//中文验证.邮箱验证.电话号码.手机.QQ.身份证.(由字母.数字.下划线组成,不能以数字开头)header('content-type:text/html;c ...
- 阿里云SaaS生态战略发布,用宜搭5分钟部署OCR文字识别
7月26日,在阿里云合作伙伴峰会上,阿里云发布SaaS生态战略:通过SaaS加速器为合作伙伴提供应用开发.集成.上云.售卖的全链路解决方案,提升开发效率和集成效率,缩短商业化周期. 作为阿里SaaS加 ...
- PHP生成唯一的促销/优惠/折扣码,由字母和数字组成。
首先我们先搞清楚什么是促销/优惠/折扣码?它有什么用作: 每一个电子商务网站,现在有一种或多种类型的优惠/折扣/优惠券系统,给大家分享一下如何在PHP生成唯一的促销/折扣码.主要是实现一个优惠码系统, ...
- DTcms设置 IIS6.0设置url重写导致editor上传全部失效
1.修改iis的重写规则为htm 2.修改后台后缀为htm 解决
- Tips:取消UICollectionView的隐式动画
http://www.cocoachina.com/ios/20151204/14211.html UICollectionView在reloadItems的时候,默认会附加一个隐式的fade动画,有 ...