zoukankan      html  css  js  c++  java
  • 用js实现个优先队列吧

    队列是一种很常用的数据结构,它是一组遵循先进先出(FIFO)规则的项。在现实生活中,最常见的队列的例子就是排队。队列有一些方法,入队、出队、队列的长度,清空队列等。用js实现一个普通的队列代码如下:

     function Queue() {
                var queue = [];
                // 队列元素个数
                this.size = function () {
                    return queue.length;
                };
                // 入队
                this.enqueue = function (item) {
                    queue.push(item);
                };
                // 出队
                this.dequeue = function () {
                   return queue.shift();
                };
                // 队列是否为空
                this.isEmpty = function () {
                    return !queue.length;
                };
                // 队列第一个元素
                this.front = function () {
                    return queue[0];
                };
                // 清空队列
                this.clear = function () {
                    queue = [];
                }
            }

    如果是优先队列,其实就是 给每个需要排队的元素加个优先级,优先级高的在前面,优先级低的就只好在后面了。队列的其他方法不变,只是入队的方法变了,需要根据元素的优先级排队,实现代码如下:

     1 function PriorityQueue() {
     2             var queue = [];
     3            // 队列是否为空
     4             this.isEmpty = function () {
     5                 return !queue.length;
     6             };
     7             this.value = function (){
     8                 return queue;
     9             };
    10             this.enqueue = function (item) {
    11                 if (this.isEmpty()) {
    12                     queue.push(item);
    13                 } else {
    14                     var flag = false; //判断是否排队
    15                     for (let i = 0; i < queue.length; i++) {
    16                         if (queue[i].priority <= item.priority) {
    17                             queue.splice(i, 0, item);
    18                             flag = true;
    19                             break;
    20                         }
    21                     }
    22                     // 循环后未入队,优先级最大,插入到第一位
    23                     if (!flag) {
    24                         queue.push(item);
    25                     }
    26                 }
    27             };
    28 }
  • 相关阅读:
    [BZOJ2127]happiness(最小割)
    [网络流24题]餐巾计划问题(费用流/有上下界的费用流)
    SQL注入-数据库判断
    Web渗透实验:基于Weblogic的一系列漏洞
    使用nmap 验证多种漏洞
    smb(ms17-010)远程命令执行之msf
    ashx后门
    Windows Server 2008 R2入门之用户管理
    windows2008,命令行远程登录
    利用jspx解决jsp后缀被限制拿shell
  • 原文地址:https://www.cnblogs.com/renbo/p/9669610.html
Copyright © 2011-2022 走看看