js模拟队列----小优先队列

队列:先进先出,后进后出

		var Queue = (function(){
			var item = new WeakMap();
			class Queue{
				constructor(){
					item.set(this,[]);
				}
				enqueue(ele,priority){
					var ls = item.get(this);
					var obj = {
						ele:ele,
						pro:priority
					};
					var add = false;
					for(var i = 0; i < ls.length; i++ ){
						if(priority < ls[i].pro){
							ls.splice(i,0,obj);
							add = true;
							break;
						}
					}
					if(!add){
						ls.push(obj);
					}

				}
				dequeue(){
					var ls = item.get(this);
					return ls.shift();
				}
				size(){
					var ls = item.get(this);
					return ls.length;
				}
				front(){
					var ls = item.get(this);
					return ls[0];
				}
				isEmpty(){
					var ls = item.get(this);
					return !ls.length;
				}
				print(){
					var ls = item.get(this);

					for(var i = 0; i < ls.length; i++){
					console.log(`${ls[i].ele}-${ls[i].pro}`);
					}
				}
			}
			return Queue;
		})();

		var queue = new Queue();

		queue.enqueue("b",2);
		queue.enqueue("a",1);
		queue.enqueue("c",3);
		queue.enqueue("d",4);
		queue.print();

  

原文地址:https://www.cnblogs.com/muamaker/p/9197589.html

时间: 2024-11-05 18:31:33

js模拟队列----小优先队列的相关文章

JS模拟键盘事件 -- 原理及小例子

小例子: (Chrome下可用,其他浏览器未测试,使用新方法,暂不考虑兼容性) 代码如下: 1 <input type="button" tabindex="-1" value="点点点点点" id="btn"> 2 <input type="text" placeholder="1"> 3 <input type="text" plac

ZOJ 2724 Windows 消息队列 (优先队列)

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2724 Message queue is the basic fundamental of windows system. For each process, the system maintains a message queue. If something happens to this process, such as mouse click, text cha

php+mysql 模拟队列发送邮件

1.使用场景 主要解决PHP开发过程中,常见的发送多封邮件时页面卡死的问题,如果需要给网站所有用户发送一封系统通知邮件,假设网站有10000个注册用户,发送每封邮件需要0.1秒,直接发送导致页面耗时长卡死,因此就要用到队列的知识. 2.建表语句 create table users ( user_id int(5) not null auto_increment, user_email varchar(40) not null, user_password char(32) not null,

3-08. 堆栈模拟队列(25)(ZJU_PAT 模拟)

题目链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: (1) int IsFull(Stack S):判断堆栈S是否已满,返回1或0: (2) int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0: (3) void Push(Stack S, ElementType item ):将元素item压入堆栈S: (4)

STL栈、队列、优先队列—————基础知识

0基本特点:后进先出(LIFO) 注意: 不一定最先进栈的最后出栈,只要保证是栈顶元素出栈就行! 当栈中存在一个元素时,top=0,因此通常把空栈的判定条件定为top= - 1: STL 中栈的使用方法: 头文件:#include <stack> 基本操作: push(x) 将x加入栈中,即入栈操作 pop() 出栈操作(删除栈顶),只是出栈,没有返回值 top() 返回第一个元素(栈顶元素) size() 返回栈中的元素个数 empty() 当栈为空时,返回 true STL 中队列的使用(

【Weiss】【第03章】练习3.25:数组模拟队列

[练习3.25] 编写实现队列的例程,使用 a.链表 b.数组 Answer: 在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以. 数组模拟队列和链表的两点小不同是: ①.数组空间有限,入队需要检测数组是否已经满 ②.数组经过几次操作后,rear可能绕回front前面,所以许多操作都要用模来实现. 测试代码: 1 #include <iostream> 2 #include "queue.h" 3 using namespace std; 4 usin

STL 队列 、优先队列、栈 小结

学长说现在基本上可以开始学习STL中一些标准模板了,今天先总结一下 队列.栈.优先队列 1.队列(queue) 先进先出原则,头文件#include <queue>,定义结构queue<类型>名称;queue<int>q.queue<node>q等: 如: struct node { int x; }f; queue<node>q;//结构体类型队列 q.push(f) //将f压入队列的尾部 node t = q.pop()// 弹出队列的第一

STL队列、优先队列、栈

STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队列中拥有的元素个数 top() 返回优先队列对顶元素 在默认的优先队列中,优先级高的先出队.在默认的int型中先出队的为较大的数. 使用方法: 头文件: #include <queue> 声明方式: 1.普通方法: priority_queue<int>q;//通过操作,按照元素从大到小的顺序出队

关于js模拟c#的Delegate(委托)实现

这是我的第一篇博文,想来讲一讲js的函数.我的标题是js模拟c#的Delegate. 一.什么是Delegate(委托) 在jquery中有delegate函数,作用是将某个dom元素的标签的事件委托给一个函数队列,在触发这个事件的时候会触发这个函数队列中的所有函数.而c#中的Delegate对象也是如此,将多个方法添加至一个委托对象,或称将多个方法委托给一个委托对象,当调用委托对象的Invoke方法时会调用所有被委托的方法.由此可以看出Delegate的本质应该是一个函数队列,执行委托对象就是