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 }
  • 相关阅读:
    php编译错误:jpeglib.h not found.
    php编译错误:Please reinstall the libcurl distribution
    php编译错误:Cannot find OpenSSL's <evp.h>
    php shmop windows 信号量锁
    vsftpd配置
    putty ssh 证书登录及问题
    mysql被收购 用mariadb
    centos 7 php7 yum源
    3dmax 欢迎页卡住
    用python进行服务器的监控
  • 原文地址:https://www.cnblogs.com/renbo/p/9669610.html
Copyright © 2011-2022 走看看