Javascript中队列

     function Queue() {
            this.items = [];
            Queue.prototype.enqueue = function (item) {
                this.items.push(item);
            }

            Queue.prototype.dequeue = function () {
               return this.items.shift();
            }

            Queue.prototype.front = function () {
                return this.items[0];
            }

            Queue.prototype.isEmpty = function () {
                return this.item.length == 0;
            }

            Queue.prototype.size = function () {
                return this.items.length;
            }

            Queue.prototype.toString = function () {
                var result = "";
                for (var i = 0; i < this.items.length; i++) {
                    result += this.items[i] + " "
                }
                return result;
            }
        }

        // 击鼓传花
        function PassGames(namelist, num) {
            var queue = new Queue();
            for (var i = 0; i < namelist.length; i++) {
                queue.enqueue(namelist[i]);
            }

            while (queue.size() > 1) {
                // num 之前的人放到队列末尾
                for (var i = 0; i < num - 1; i++) {
                    queue.enqueue(queue.dequeue());
                }
                // num对应的人淘汰掉
                queue.dequeue();
            }
            var endName = queue.front();  
            alert(endName);         
            return namelist.indexOf(endName);
        }
        var names = ['lily', 'tom', 'jahn', 'lilei', 'guo'];

        alert( PassGames(names, 3));

 带优先级的队列

        function PriorityQueue() {
            function QueueElement(element, priority) {
                this.element = element;
                this.priority = priority;
            }
            this.items = [];
            PriorityQueue.prototype.enqueue = function (element, priority) {

                var queueElement = new QueueElement(element, priority);

                // 判断队列是否为空
                if (this.items.length == 0) {
                    this.items.push(queueElement);
                } else {
                    // 判断当前有没有插入
                    var added = false;
                    for (var 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) {
                        this.items.push(queueElement);
                    }
                }
            }

            PriorityQueue.prototype.dequeue = function () {
                return this.items.shift();
            }

            PriorityQueue.prototype.front = function () {
                return this.items[0];
            }

            PriorityQueue.prototype.isEmpty = function () {
                return this.item.length == 0;
            }

            PriorityQueue.prototype.size = function () {
                return this.items.length;
            }

            PriorityQueue.prototype.toString = function () {
                var result = "";
           
                for (var i = 0; i < this.items.length; i++) {
                    result += this.items[i].element + '-' + this.items[i].priority + ' ';
                }
                return result;
            }
        }

        var pq = new PriorityQueue();
        pq.enqueue('aaa', 110);
        pq.enqueue('bbb', 120);
        pq.enqueue('ccc', 14);
        pq.enqueue('ddd', 22);

        alert(pq.toString());

 

posted @ 2020-06-13 11:49  bradleydan  阅读(67)  评论(0)    收藏  举报