队列&优先队列
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++实现(二叉堆)
优先队列简单介绍: 操作系统表明上看着是支持多个应用程序同一时候执行.其实是每一个时刻仅仅能有一个进程执行,操作系统会调度不同的进程去执行. 每一个进程都仅仅能执行一个固定的时间,当超过了该时间.操作 ...
随机推荐
- Android的ADB学习笔记
1.ADB的常用命令 Pull命令:adb -e|-d pull {文件的路径} {获取文件路径} 2. 文件操作的基本命令 ls -al:显示当下目录下用户对文件的操作权限. = la -al ...
- java简单jdbc查询操作
所采用的mysql的数据库驱动版本:5.0.8 mysql-connector-java-5.0.8-bin.jar 程序结构图: 表结构: 创表sql: Create Table CREATE TA ...
- BZOJ 3296: [USACO2011 Open] Learning Languages
Time Limit: 5 Sec Memory Limit: 128 MB Submit: 387 Solved: 206 [Submit][Status][Discuss] Description ...
- jeecg Access restriction 问题解决
最近导入新项目,导入所有用到的jar包,发现其中一个引用报错 import com.sun.istack.internal.Nullable; 具体信息如下: Access restriction: ...
- Python 五个知识点搞定作用域
Python 五个知识点搞定作用域 1.块级作用域 想想此时运行下面的程序会有输出吗?执行会成功吗? #块级作用域 if 1 == 1: name = "lzl" print(na ...
- npm上面实用的第三方工具包
npm上面实用的第三方工具包 live-server 作用:为页面提供实时刷新重载的功能,并且能提供一个http服务器 官方地址:https://www.npmjs.com/package/live- ...
- Facebook iOS App如何优化启动时间
http://www.cocoachina.com/ios/20160105/14870.html 提高 Facebook 应用的性能已经成为 Facebook 持续关注的领域.因为我们相信一个高性能 ...
- 使用C3P0和DBUtils
1.导包 2.配置c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-c ...
- Request.Cookies和Response.Cookies
Request.Cookies创建的Cookie只能用于后台不能用于HTML的前台Response.Cookies操作过的Cookie,所有方法获取到的都是被更新过的值,也就是说Response.Co ...
- Length of Last Word输出最后单词的字母个数
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...