javascript 实现数据结构 - 队列
队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。
1.构造函数构建队列函数
let  Queue = (function () {
     const items = new WeakMap();
     const weak = {};
     return function(){
            items.set(weak, []);
            this. enqueue = function() {  //向队列添加一个或多个元素
                let arr = items.get(weak);
                for(let i = 0,length = arguments.length;i<length;i++){
                	arr.push(arguments[i]);
                }
            };
            this.dequeue= function(valule) {  //从队列移除元素
                let arr = items.get(weak);
                return arr.shift(); //返回移除的元素
            }
             this.front = function(){  //查看队列头元素
                let arr = items.get(weak);
                 return arr[0];
            }
            this.isEmpty = function(){   //检查队列是否为空
                 let arr = items.get(weak);
                 return arr.length == 0;
            }
            this.print = function(){
                 let arr = items.get(weak);
                 console.log(arr.toString());
            }
         }
})();
let queue = new Queue();
queue.enqueue(1,2,3);
console.log(queue.isEmpty());//false
queue.print();//1,2,3
2.用ES6语法实现队列函数
let  Queue = (function () {
     const items = new WeakMap();
    class Queue1 {
          constructor(){
             items.set(this,[]);
          }
          enqueue () {  //向队列添加一个或多个元素
             let arr = items.get(this);
             for(let i = 0,length = arguments.length;i<length;i++){
                 arr.push(arguments[i]);
              }
          };
          dequeue(valule) {  //从队列移除元素
                let arr = items.get(this);
                return arr.shift(); //返回移除的元素
          }
          front (){  //查看队列头元素
                let arr = items.get(this);
                 return arr[0];
          }
          isEmpty(){   //检查队列是否为空
               let arr = items.get(this);
               return arr.length == 0;
          }
          print (){
               let arr = items.get(this);
               console.log(arr.toString());
          }
    }
     return Queue1
})();
let queue = new Queue();
queue.enqueue(1,2,3);
console.log(queue.isEmpty());//false
queue.print();//1,2,3
3.优先队列
元素的添加和移除是基于优先级的。一个现实的例子就是机场登机的顺序。头等舱和商务舱乘客的优先级要高于经济舱乘客。在有些国家,老年人和孕妇(或带小孩的妇女)登机时也享有高于其他乘客的优先级。另一个现实中的例子是医院的(急诊科)候诊室。医生会优先处理病情比较严重的患者。通常,护士会鉴别分类,根据患者病情的严重程度放号。实现一个优先队列,有两种选项:设置优先级,然后在正确的位置添加元素;或者用入列操作添加元素,然后按照优先级移除它们。
let PriorityQueue = (function() {
 	const items = new WeakMap();
    const weak = {};
    function QueueElement (element, priority){
 		this.element = element;
 		this.priority = priority;
 		}
    return function(){
    items.set(weak, []);
 	this.enqueue = function(element, priority){
 		let arr = items.get(weak);
 		let queueElement = new QueueElement(element, priority);
 		let added = false;
 		for (let i=0; i<arr.length; i++){
 			if (queueElement.priority < arr[i].priority){
 				arr.splice(i,0,queueElement);
 				added = true;
 				break; // {4}
 			}
 		}
 		if (!added){
 			arr.push(queueElement);
 		}
 	};
 	this.dequeue= function(valule) {  //从队列移除元素
         let arr = items.get(weak);
          return arr.shift(); //返回移除的元素
     }
     this.front = function(){  //查看队列头元素
          let arr = items.get(weak);
          return arr[0];
            }
     this.isEmpty = function(){   //检查队列是否为空
          let arr = items.get(weak);
          return arr.length == 0;
     }
 	 this.print = function(){
 	 	let arr = items.get(weak);
 		for (let i=0; i<arr.length; i++){
 		console.log(`${arr[i].element} - ${arr[i].priority}`);
 		}
 	 };
	 }
  })()
let queue = new PriorityQueue();
console.log(queue);
queue.enqueue('zhanhong',2);
queue.enqueue('zhan3',3);
queue.enqueue('zhan4',4);
queue.enqueue('zhang1',1);
console.log(queue.isEmpty());
console.log(queue.front());
queue.print();
4.javascript 任务队列
当我们在浏览器中打开新标签时,就会创建一个任务队列。这是因为每个标签都是单线程处理所有的任务,它被称为事件循环。浏览器要负责多个任务,如渲染HTML,执行JavaScript代码,处理用户交互(用户输入、鼠标点击等),执行和处理异步请求。
javascript 实现数据结构 - 队列的更多相关文章
- 【javascript】数据结构-队列
		<!DOCTYPE html> <html> <head> <title>queue</title> <meta charset=&q ... 
- JavaScript 版数据结构与算法(二)队列
		今天,我们要讲的是数据结构与算法中的队列. 队列简介 队列是什么?队列是一种先进先出(FIFO)的数据结构.队列有什么用呢?队列通常用来描述算法或生活中的一些先进先出的场景,比如: 在图的广度优先遍历 ... 
- javascript实现数据结构:广义表
		原文:javascript实现数据结构:广义表 广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an ... 
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
		栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ... 
- java 数据结构 队列的实现
		java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ... 
- javascript字典数据结构Dictionary实现
		<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ... 
- C++  泛型  编写的  数据结构    队列
		平时编程里经常需要用到数据结构,比如 栈和队列 等, 为了避免每次用到都需要重新编写的麻烦现将 C++ 编写的 数据结构 队列 记录下来,以备后用. 将 数据结构 队列 用头文件的形式写成 ... 
- C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
		1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ... 
- java数据结构——队列、循环队列(Queue)
		每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ... 
随机推荐
- Pandas基础知识(二)
			Pandas的索引对象 index的对象是不可以修改的如执行index[1] = 'f',会报错"Index does not support mutable operations" ... 
- 微信H5支付 遇到坑的一些解决方法
			解决办法 1. 商家参数格式有误,请联系商家解决 a.对于前后端分离的开发模式 前端发起请求 服务端请求微信h5支付统一下单接口 返回参数mweb_url 给前端 然后前端调起微信h5支付 b.注意的 ... 
- jqGrid的userData的用法!!!
			在一次项目中想从后台自定义一些返回值传回jqGrid,所以就想到了jqGrid的这个userData属性,但是真的是坑了我好惨,这里记录一下! 1.首先看说明,这个jsonReader的默认配置,us ... 
- SSM框架整合的其它方式
			---------------------siwuxie095 SSM 框架整合的其它方式 1.主要是整合 Spring ... 
- sqlplus中设定行大小、页大小、字符列格式、数字列格式、清屏
			sqlplus虽然是DBA们最为经常使用的Oracle客户端工具,但是它在输出结果格式化上不是很好,如折行.分页不好等,所以一般启动sqlplus后多少都要做些设置,如linesize.pagesiz ... 
- Java最小化镜像制作
			下载Oracle官网的JRE包,最终下载的包如下: jre-8u181-linux-x64.tar.gz 解压JRE包并删除不必要的文件 #解压 tar xf jre-8u181-linux-x64. ... 
- 一 分析easyswoole源码(启动服务)
			分析easyswoole源码 1以启动为例 //检查是否已经安装 installCheck();//检查锁文件是否存在,不存在结束 //启动服务 serverStart showLogo();//显示 ... 
- ORM常用字段介绍
			Django中的ORM Django项目使用MySQL数据库 1. 在Django项目的settings.py文件中,配置数据库连接信息: DATABASES = { "default&qu ... 
- nc6 用业务插件注册来跑按钮事件
			在实际开发中,有些需求是要求系统单据,编辑或者触发其他按钮来回写其他模块单据 这时候就能用业务插件方式来触发其他模块的按钮事件,而不用去模块找对应的按钮编辑事件类 package hz.bs.hzct ... 
- JVM 字节码(一)字节码规范
			JVM 字节码(一)字节码规范 JVM 学习资源 Java ClassFile 字节码规范(Oracle) Java 虚拟机规范(Java SE 7 中文版) (周志明等译) Java 反编译工具 - ... 
