js 优先级队列

文章目录

  • 优先级队列
    • 例子
    • 优先级队列实现 -- 数组方法
    • 总结

优先级队列

js 优先级队列_第1张图片

例子

最常见的例子就是操作系统中的线程,重要的先执行不重要的后执行(当然电脑肯定不是按照接下来的代码实现的,只是操作过程类似)

优先级队列实现 – 数组方法

和队列一样,只是添加元素需要考虑插入地点,以及转变为字符串需要改变一下输出方式,不然会变成很多object !

代码:

DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Documenttitle>
head>
<body>
  
  <script>
    function PriorityQueue(){
      // 封装类 --> 在PriorityQueue里面重新封创建了一个类:可以理解为内部类
      function QueueElement(element,priority){
        this.element = element;
        this.priority = priority;
      }

      // 属性
      this.items = [];

      // 实现插入方法
      PriorityQueue.prototype.enqueue = function(element,priority){
        let queueElement = new QueueElement(element,priority);
        if(this.items.length === 0){
          this.items.push(queueElement);
        }else{
          let added = false;
          for(let i = 0;i<this.items.length;i++){
            if(queueElement.priority < this.items[i].priority){
              this.items.splice(i,0,queueElement);
              added = true;
              break;
            }
          }
          if(added == false){
            this.items.push(queueElement);
          }
        }
      }

      // 2.从队列中删除前端元素
      PriorityQueue.prototype.delqueue = function(element){
        return this.items.shift(element);
      };

      // 3.查看前端元素
      PriorityQueue.prototype.front = function(){
        return this.items[0];
      }

      // 4.查看队列是否为空
      PriorityQueue.prototype.isEmpty = function(){
        return this.items.length == 0;
      }

      // 5.查看队列中元素个数
      PriorityQueue.prototype.size = function(){
        return this.items.length;
      }

      // 6.toString方法
      PriorityQueue.prototype.toString = function(){
        let a = [];
        for(let i =0;i < this.items.length;i++){
          a[i] = this.items[i].element + "-" + this.items[i].priority
        }
        return a.join(" ");
      }
    }
    
    var pq = new PriorityQueue();
    pq.enqueue('abc',111);
    pq.enqueue('abd',11);
    pq.enqueue('nbc',50);
    pq.enqueue('dfg',90);
    pq.enqueue('bvn',3);
    console.log(pq);
    pq.delqueue();
    console.log(pq.toString());
  script>
body>
html>

总结

这里总结一下,现在写的不管是堆还是队列,都是通过数组实现的,而数组又提供了很多方便的操作,所以基本上都是数组方法的调用,所以理解起来很简单,写起来也很简单!但是这里要理解的也并不是数组的操作,而是如何定义数据结构,使其能实现堆或者列表!

下一篇才算是真正的步入数据结构!

你可能感兴趣的:(#,数据结构,算法,优先级队列)