zoukankan      html  css  js  c++  java
  • 第三页 队列学习

    队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项 队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。

    enqueue(element(s)):向队列尾部添加一个(或多个)新的项。
    dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
    front():返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不
    做任何变动(不移除元素,只返回元素信息——Stack类的peek方法非常类似)。
    isEmpty():如果队列中不包含任何元素,返回true,否则返回false
    size():返回队列包含的元素个数,与数组的length属性类似。

         //创建一个自己的队列
            function MyQueen() {
                //这里是属性和方法
                var items = [];
                this.enqueue = function (element) {
                    items.push(element);
                };
                this.dequeue = function () {
                    return items.shift();
                };
                this.front = function () {
                    return items[0];
                };
                this.isEmpty = function () {
                    return items.length == 0;
                };
                this.clear = function () {
                    items = [];
                };
                this.size = function () {
                    return items.length;
                };
                this.print = function () {
                    console.log(items.toString());
                };
            }
            var queue = new MyQueen();
            console.log(queue.isEmpty()); //输出true
            //向队列添加
            queue.enqueue("John");
            queue.enqueue("Jack");
            queue.enqueue("Camila");
            queue.print();//队列数组转换字符串
            console.log(queue.size()); //输出3
            console.log(queue.isEmpty()); //输出false
            queue.dequeue();//移除第一个进来的  然后下面输出Jack,Camila
            queue.print();

    优先队列:元素的添加和移除是基于优先级的。一个现实的例子就是机场登机的顺序。头等舱和商务舱乘客的优先级要高于经济舱乘客。在有些国家,老年人和孕妇(或带小孩的妇女)登机时也享有高于其他乘客的优先级。

        //优先队列
            function PriorityQueue() {
                var items = [];
                this.isEmpty = function () {
                    return items.length == 0;
                };
          
                //{1}: 要向PriorityQueue添加元素,需要创建一个特殊的元素这个元素包含了要添加到队列的元素(它可以是任意类型及其在队列中的优先级。
                function QueueElement(element, priority) { //{1} 创建新元素
                    this.element = element;
                    this.priority = priority;//表示优先级
                }
                this.enqueue = function (element, priority) {//入队列
                    var queueElement = new QueueElement(element, priority);
                    if (this.isEmpty()) {// {2} 如果队列为空 添加元素
                        items.push(queueElement); 
                    } else {//否则,就需要比较该元素与其他元素的优先级。
                        var added = false;//添加标识
                        for (var i = 0; i < items.length; i++) {//遍历这个队列数组的所有元素,
                            if (queueElement.priority < items[i].priority)
                            {
                                items.splice(i, 0, queueElement); // {3} 一旦找到priority值更大的元素,就插入新元素
                                //数组的splice()的方法 在i索引位置开始,删除后面0个元素,插入元素
                                added = true;
                                break; // {4} 终止for循环
                            }
                        }
                        if (!added) { //{5} 如果要添加元素的priority值大于任何已有的元素,把它添加到队列的末尾就行了
                            items.push(queueElement);
                        }
                    }
                    this.print = function () {
                        var str = '';
                        if (!this.isEmpty()) {
                            //for (var i = 0; i < items.length; i++) {
                            //    str += items[i].element + "_" + items[i].priority+"--";
                            //}
                            str += items[0].element + "_" + items[0].priority ;
                        }
                        console.log(str);
                    };
                };
                //其他方法和默认的Queue实现相同
            }
            var priorityQueue = new PriorityQueue();
            priorityQueue.enqueue("John", 2);  //[John,2]
            priorityQueue.enqueue("Jack", 1);// [Jack,1],[John,2]
            priorityQueue.enqueue("Camila", 1);// [Jack,1],[Camila,1],[John,2]
            priorityQueue.print();// 输出 Jack_1
  • 相关阅读:
    可视化工具gephi源码探秘(一)
    在ssh中利用Solr服务建立的界面化站内搜索---solr2
    Nutch源码阅读进程5---updatedb
    利用Solr服务建立的站内搜索雏形---solr1
    Nutch源码阅读进程4---parseSegment
    Nutch源码阅读进程3---fetch
    VS2015编译GEOS3.5.1源码
    VS2015编译GDAL2.2.1源码
    UE4读取脑电波MindWave插件(展示如何使用第三方库制作UE4插件)
    UE4修改自Rama的UDP通信蓝图插件
  • 原文地址:https://www.cnblogs.com/lbjcoder/p/9337250.html
Copyright © 2011-2022 走看看